Unixで複数のプロセスをすばやく停止するには?

Unixで複数のプロセスをすばやく停止するには?

UNIXで複数のプロセスをすばやく停止する方法

ps/ topkill

プロセス数が多い場合は、シェルスクリプトを使用します。 1つまたは2つのUnixコマンドでこれを実行する他の方法はありますか?

答え1

私の選択はpkill/pgrep

答え2

私が使用しているオンラインbashスクリプトは次のとおりです。

ps auxwww | grep -v grep | grep -i $1 | awk '{print $2}' | xargs kill -9

名前に最初のパラメータを含むすべてのプロセスを終了します(大文字と小文字を区別しません)。各セクションの分類は次のとおりです。

  • ps auxwww非常に広い「コマンド」フィールドを使用してすべてのプロセスを印刷します。
  • grep -v grep殺人から除外されましたか?
  • grep -i $1最初の引数を含むすべての行に一致します。
  • awk '{print $2}'すべてのプロセスIDを取得する
  • xargs kill -9選択したすべてのプロセスを終了

答え3

Psdoomは実際にプロセスを終了する唯一の方法です。 http://psdoom.sourceforge.net/

答え4

私はpgrep / pkillコマンドを使用することを好みます。例は次のとおりです。

[root@testrhel7 ~]# pgrep -l http
2967 httpd
2968 httpd
2969 httpd
2970 httpd
2971 httpd
2972 httpd
[root@testrhel7 ~]#
[root@testrhel7 ~]# pkill -e http
httpd killed (pid 2967)
httpd killed (pid 2968)
httpd killed (pid 2969)
httpd killed (pid 2970)
httpd killed (pid 2971)
httpd killed (pid 2972)
[root@testrhel7 ~]#

もちろん、forループを使用することもできます:

[root@testrhel7 ~]# ps -ef  |grep http| grep -v grep
root       2989      1  0 16:06 ?        00:00:00 /usr/sbin/httpd -DFOREGROUND
apache     2990   2989  0 16:06 ?        00:00:00 /usr/sbin/httpd -DFOREGROUND
apache     2991   2989  0 16:06 ?        00:00:00 /usr/sbin/httpd -DFOREGROUND
apache     2992   2989  0 16:06 ?        00:00:00 /usr/sbin/httpd -DFOREGROUND
apache     2993   2989  0 16:06 ?        00:00:00 /usr/sbin/httpd -DFOREGROUND
apache     2994   2989  0 16:06 ?        00:00:00 /usr/sbin/httpd -DFOREGROUND
[root@testrhel7 ~]#

[root@testrhel7 ~]# for i in $(ps -ef | awk '/http/ {print $2}'); do kill -9 $i; done 

これが役に立つことを願っています。幸せな殺人になりますように。

関連情報