コマンドを実行しps -A | grep <application_name>
、次のプロセスのリストを取得します。
19440 ? 00:00:11 <application_name>
21630 ? 00:00:00 <application_name>
22694 ? 00:00:00 <application_name>
リスト内のすべてのプロセスを終了したい:19440
、、、21630
。22694
私はこれを試しましたが、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