Word amarokを含むすべてのプロセスを強制終了したいとします。実行したいコマンドを印刷することができます。しかし、どうやって実際にシェルにそれらを実行させるのですか。すなわち。
ps aux | grep -ie amarok | awk '{print "kill -9 " $2}'
Output:
kill -9 3052
kill -9 3071
kill -9 3076
kill -9 3077
kill -9 3079
kill -9 3080
kill -9 3082
kill -9 3083
kill -9 3084
kill -9 3085
kill -9 3086
kill -9 3087
kill -9 3088
kill -9 3089
kill -9 4031
man 1 pkill
から
-f The pattern is normally only matched against the process name.
When -f is set, the full command line is used.
これは、例えばps aux
にこれらの行があるとしたら、
Apache 24268 0.0 2.6 388152 27116 ? S Jun13 0:10 /usr/sbin/httpd
Apache 24272 0.0 2.6 387944 27104 ? S Jun13 0:09 /usr/sbin/httpd
Apache 24319 0.0 2.6 387884 27316 ? S Jun15 0:04 /usr/sbin/httpd
Pkillの-f
オプションを使ってそれらをすべてkillできます
pkill -f httpd
ps aux | grep -ie amarok | awk '{print $2}' | xargs kill -9
xargs(1):xargs - 引数リストを作成し、ユーティリティを実行します。引数をkill
やls
などに渡す場合に役立ちます。
pgrep
を使用
kill -9 $(pgrep amarok)
これをするための安全な方法は:
pkill -f amarok
私はこのコマンドの殺害はまさにあなたが必要としているものだと思います。このコマンドは「プロセスを名前で強制終了する」と説明されています。使い方は簡単です。例えば、
killall chrome
このコマンドはChromeのすべてのプロセスを終了させます。こちらはkillallコマンドに関するリンクです。
http://linux.about.com/library/cmd/blcmdl1_killall.htm
このコマンドがお役に立てば幸いです。
pkill -xはプロセス名と正確に一致します。
pkill -x amarok
pkill -fも似ていますが、正規表現パターンを使用できます。
他のパラメータ(たとえば、-x、-f)を指定しないでpkillを実行すると、プロセス名を部分的に一致させることができます。だから "pkill amarok"はamarok、amarokBanana、bananaamarokなどを殺すでしょう。
-xがデフォルトの動作になっていたらいいのにと思います。
コマンドの出力を実行したい場合は、それを$(...)
の中に入れることができますが、特定のタスクのためにkillall
およびpkill
コマンドを調べてください。
try kill -s 9 ps -ef |grep "Nov 11" |grep -v grep | awk '{print $2}'
11月11日のプロセスを強制終了するか、-s 9 ps -ef |grep amarok|grep -v grep | awk '{print $2}'
を強制終了する
バックティックで囲むか、$()の内側に置くことで、出力をサブプロセスとして評価することもできます。
`ps aux | grep -ie amarok | awk '{print "kill -9 " $2}'`
$(ps aux | grep -ie amarok | awk '{print "kill -9 " $2}')
実行可能ファイルにコマンドを追加して、+ x許可を設定してから実行するのでしょうか。
ps aux | grep -ie amarok | awk '{print "kill -9 " $2}' > pk;chmod +x pk;./pk;rm pk
Cygwinまたはkillall
を含まない最小限のシェルを使用している場合は、次のスクリプトを使用できます。
#/bin/bash
ps -W | grep "$1" | awk '{print $1}' | xargs kill -f;
$ killall <process name>