回答:
古き良き時代の何が問題なのか、
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
pkillfromprocpsパッケージを使用します。