複数のプロセスを強制終了する方法


21

useを強制終了するプロセスのPIDを見つけるには:

pgrep <process command>

次に、killコマンドを使用して、返されたPIDを殺します pgrep <process command>

kill <PID>

これらのコマンドを1つに組み合わせて、PIDまたはPIDを返すことができpgrep <process command>ますか?または、コマンド名で複数のプロセスを強制終了する方法はありますか?

何かのようなもの : kill(pgrep <name of process>)


3
試しましたpkillか?または、を使用することもできますxargs
マシューロック

1
マニュアルページはこのようなものにも適していることに注意してください。多くの場合、コマンドの使用方法だけでなく、関連するコマンドについても説明します。この場合、pgrepmanページにはあちこちで言及さpkillれています(2つのコマンドは同じパッケージから来るため)。
パトリック

回答:


27

pkillを使用できます:

pkill httpd

プロセス置換を使用することもできます(ただし、これはそれほど明確ではありません)。

kill $(pgrep command)

そして、あなたは使用したいかもしれませんxargs

pgrep command | xargs kill

4
私は回答で同様のことをしましたが、競合状態を導入したことが指摘されました。とへの呼び出しの間にプロセスIDが無効になる場合がpgrepありkillます。使用するだけpkillです。
クサラナナンダ

3
@Kusalananda pkillプロセスリストを取得してから実際にシグナルを送信する間にも同じことが起こりますが、その場合は見づらいだけです。
ホッブズ

1
私はkill $(ps|head -1)、競合状態を回避するようなものをループする答えを作成しようとしました...しかし、実際にそれを回避する方法はありません。プロセスはパイプラインの任意の時点で停止する可能性があります。
ロスプレッサー

一部のプログラムでは複数のインスタンスが実行されている可能性があり、それらすべてを強制終了したくない場合があるため、pkillには注意してください。最初にpgrepを実行すると、pgrepとpkill(race)を実行する間に別のpgrepが起動しない限り役立ちます。
ジョー

1
Cプログラムでも競合状態を回避できず、ウィンドウは小さくなります。本当にアトミックに行う唯一の方法は、名前でプロセスを強制終了するシステムコールを追加することです。ただし、通常、プロセスIDはすぐに再利用されないため、危険はほとんどありません。
バーマー

17

使用することもできますkillall、例えば

killall firefox

SIGTERMすべてのfirefoxプロセスに送信します。


8
killallUNIXシステムによって意味が異なることに注意してください。Linux以外のシステムを使用している場合は、必ずドキュメントを確認してください。
Random832

killall -KILL firefoxすごいやりがいを感じることができます。
パイプ

の非移植性killallは、私が決してそれを使用しない理由です。killallたとえば、ソラリスボックスでの実行は悲惨です。
パトリック


0

配列を使用して複数のプロセスを強制終了できます。この場合$ip、オプションを、$hostnameまたは同様のものとして指定できます。

ip=your_ip_address; declare -a arr=$(ps aux|grep tail|grep $ip|awk '{print $2}'); for pid in ${arr[@]}; do kill -9 $pid; done;
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.