web-dev-qa-db-ja.com

プロセスのIDを見つけて強制終了する

バックグラウンドプロセスを強制終了する必要があるときはいつでもps -e | grep <process_name>

これはこのようなものを出力します1766 ? 00:00:13 conky、次に、プロセスIDを使用してkillのようにkill 1766

これを簡単にする方法はありますか?早くする?タイピングの量を減らしますか?

17
Gautam

(TL、DR:pgreppkill

多くのUNIXバリアントには pgrep およびそのコンパニオンpkillが付属しています: SolarisLinux標準プロセスユーティリティの一部 、組み込みLinuxシステムにはない場合があります)、 FreeBSDOpenBSDNetBSD 、…ですが OS XのMacPortsのみAIX以外 、および HP-UXでのみ最近pgrepユーティリティは、名前、ユーザー、およびその他のいくつかの基準に一致するプロセスのプロセスIDを表示します。 pgrepの引数は、プロセスの実行可能ファイルの名前の一部と一致する必要がある正規表現として解釈されます(これを変更するオプションを渡さない限り)。 pkillの代わりにpgrepを呼び出すと、ユーティリティはプロセスIDを表示する代わりにシグナルを送信します。

他の同様のユーティリティは pidof です。 Linux では、それは SysVinit または BusyBox によって提供されます(したがって、pgrepを持たない組み込みLinuxシステムでよく見られます) ;他のUNIXバリアントにもポートがあります。 pidofユーティリティのオプションは少なく、ほとんどの場合、実行可能ファイル名全体にのみ一致します。その付属ユーティリティkillallは、一致したプログラムにシグナルを送信しますsends。

¹ killallの意味はSolarisと他のUNIXバリアントで異なることに注意してください。 Solarisでrootとしてkillallを入力しないでください。

  • killall ProcessName(このコマンドには、プログラムのプロセス名が常にわかるとは限らないという欠点があります)。
  • pidof ProccessNameおよびkill the result form pidof
  • ps xu | grep <process name> | grep -v grep | awk '{ print $2 }' | xargs kill -9この1行を試して、bashの履歴から再利用するか、エイリアスを作成してください。
8
Hanan N.

Hananにはいくつかの良い提案がありますが、私はpgrep/pkillを追加します。それらはあなたが見つけるプロセスをより細かく制御することを可能にし、あなたが殺す必要がある正確なプロセスを知らなければ正規表現を可能にします。

追伸Hananのpidofは、バックティックを使用してkillに直接フィードできます。

kill `pidof processname`
6
Kevin

これはどう -

ps -e | awk '$4~/<process name>/{print $1}' | xargs kill

例:

[jaypal:~/Temp] sleep 100&
[1] 74863
[jaypal:~/Temp] ps -e | awk '$4~/sleep/{print $1}' | xargs kill
[1]+  Terminated: 15          sleep 100

更新:

申し訳ありませんが、これはタイピングを減らすという要件を明らかに満たしていないため、function.bashrc.profileまたは起動スクリプトに追加することをお勧めします。関数はこのようなものにすることができます-

killp() {
awk -v pname="$1" '($4==pname){print $1}' <(ps -e) | xargs kill
}

追加したら、プロセスの名前を渡すだけです。

[jaypal:~] sleep 100&
[1] 77212
[jaypal:~] killp sleep
[1]+  Terminated: 15          sleep 100
1
jaypal singh