指定された名前のすべてのプロセスを終了するには?

指定された名前のすべてのプロセスを終了するには?

コマンドを実行しps -A | grep <application_name>、次のプロセスのリストを取得します。

19440 ?        00:00:11 <application_name>
21630 ?        00:00:00 <application_name>
22694 ?        00:00:00 <application_name>

リスト内のすべてのプロセスを終了したい:19440、、、2163022694

私はこれを試しましたが、ps -A | grep <application_name> | xargs kill -9 $1エラーが発生します。

kill: illegal pid ?
kill: illegal pid 00:00:00
kill: illegal pid <application_name>

どうすればこのことをエレガントにできますか?

答え1

pkill -f 'PATTERN'

このパターンに一致するすべてのプロセスが終了しますPATTERN。この-fオプションを使用すると、コマンドライン全体(つまり引数を含む)が考慮されます。このオプションがない場合は、-fコマンド名のみが考慮されます。

また、man pkillシステムも参照してください。

答え2

問題は、ps -A | grep <application_name> | xargs -n1次の出力を返すことです。

19440
?
00:00:11
<application_name>
21630
?
00:00:00
<application_name>
22694
?
00:00:00
<application_name>

あなたはそれを使用することができますawkまず、ps出力列を取得します。

ps -A | grep <application_name> | awk '{print $1}' | xargs -n1

PID リストを返します。

19440
21630
22694

kill -9 $1すべてのPIDを終了するコマンドを追加する

ps -A | grep <application_name> | awk '{print $1}' | xargs kill -9 $1

答え3

killallこれは可能です。

$ killall application_name

答え4

プロセス名を見逃さないように、-wフラグを使用して幅広い出力をキャプチャしました。ps

ps auxww | grep -E "[a]pplication_name" | awk '{print $2}'

PID リストを返します。

7644
407
406

次に、有効な出力がある場合は、結果をxargs kill -9コマンドで連結してそのPIDをすべて終了します。

ps auxww | grep -E "[a]pplication_name" | awk '{print $2}' | ifne xargs kill -9

関連情報