UNIXで複数のプロセスをすばやく停止する方法
ps
/ top
、kill
。
プロセス数が多い場合は、シェルスクリプトを使用します。 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
これが役に立つことを願っています。幸せな殺人になりますように。