回答:
古き良き時代の何が問題なのか、
for pid in $(ps -ef | grep "some search" | awk '{print $2}'); do kill -9 $pid; done
より効率的にする方法がありますが、
for pid in $(ps -ef | awk '/some search/ {print $2}'); do kill -9 $pid; done
その他のバリエーションもありますが、基本的なレベルでは常に機能します。
echo kill -9 $pid
とにかく最初に実行するので、何が得られるのかがわかります。AIXがを持っているかどうかはわかりませんがpkill
、これは私のパンとバターUNIXです。そして、それはダウン投票されるのに本当に悪いのですか?
csh
killallを使用して、
killall vi
これにより、「vi」という名前のすべてのコマンドが強制終了されます
SIGKILLなどのシグナルも追加できます。
killall -9 vi
killall -9 vi
killall
は、名前が示すとおりのことをしています... initプロセスを強制終了します。
pkill
入手可能であれば(Linux、FreeBSD、NetBSD、OpenBSD、Solaris)、私が推奨するものです。プロセスは、コマンド名、完全なコマンドライン、またはその他の基準で指定できます。たとえばpkill vi
、コマンド名にサブストリングが含まれるすべてのプログラムを強制終了しますvi
。呼び出されたプロセスのみを強制終了するにはvi
、を使用しますpkill -x vi
。vi
最後の引数がで終わるプロセスのみを強制終了するには.conf
、を使用しますpkill -fx 'vi.*\.conf'
。
pkill
信号を送信するPIDのリストを表示するにはpgrep
、を使用します。これは、信号名または信号番号を受け入れないことを除いて、まったく同じ構文を持ちます。これらのプロセスに関する詳細を表示するには、次を実行します
ps -p "$(pgrep …)"
Linuxでは、ps -p $(pgrep -d, …)
代わりに必要です(これはバグです:Linux ps
はPOSIXに準拠していません)。
強制終了するプロセスを特定する別の一般的な方法は、特定のファイルを開いているプロセスです(プロセスの実行可能ファイルである可能性があります)。これらをリストするにはfuser
; fuser -k
信号を送信するために使用します。たとえば、のfuser -k /usr/bin/find
実行中のすべてのインスタンスを強制終了しfind
ます。
分岐し続ける暴走プロセスがある場合は、プロセスグループ全体を一度に強制終了する必要があります。プロセスグループは、そのリーダーのネガによって識別されます。リーダーは、グループ内のすべてのプロセスの祖先プロセスです。プロセスが属するプロセスグループを表示するには、実行しますps -o pgid
(さらに、表示するプロセスを選択するオプション)。プロセスグループリーダー1234とそのすべての子を強制終了することを決定した場合、実行kill -1234
またはkill -HUP -1234
その他のシグナルを実行します。
より良い方法が見つからない場合はps
、適切なオプションを使用してすべてのプロセスを一覧表示しgrep
、他のテキストフィルタリングコマンドでフィルタリングします。同じ名前のコマンド、またはその名前を含む引数を実行している他のプロセスを誤って一致させないように注意してください。例えば:
kill $(ps -o pid -o comm | awk '$2 == "vi" {print $1}')
grep
またはawk
コマンド自体がps
出力にリストされる場合があることに注意してください(ps
フィルタリングコマンドは並行して開始されるため、表示されるかどうかはタイミングに依存します)。これは、コマンド引数がps
出力に含まれる場合に特に重要です。
pkill
ここはとてもいいです。パターンを調整するために、多くのパラメーターを指定できます。
pkill
はLinux、BSD、およびSolaris-afaikで利用可能です。だから、よりも大きな広がりを持っていkillall
ます。
興味深いことに誰もこれについて言及しませんでした。pidofは、渡されたプロセス名に一致するプロセスのスペースで区切られたpidを出力します。そのため、kill
パイプを使用せずに出力を直接使用できます。Arch Linuxでは私が使用します
kill -9 $(pidof <proc name>)
このソリューションの欠点は、正規表現を使用できないことです。
試してみることをお勧めしますpkill
。
例: ps -ef | pkill -f command
強制終了するすべてのプロセスのリストを表示するには、最初に以下を試してくださいpgrep
。
例: ps -ef | pgrep -f command
ps -ef
にpkill
かはpgrep
?これらのコマンドは、標準入力から読み取りません。
$ ps -eaf | grep "xyz" | grep -v grep | awk 'print $2' | xargs kill
pkill
fromprocps
パッケージを使用します。