GNU/Linux >> Linux の 問題 >  >> Linux

特定の部分名を持つすべてのプロセスを強制終了する方法は?

プロセスをより柔軟に選択する必要がある場合は、

for KILLPID in `ps ax | grep 'my_pattern' | awk ' { print $1;}'`; do 
  kill -9 $KILLPID;
done

grep -e などを使用できます。


文字列「myProcessName」に一致するすべてのプロセスを強制終了:

ps -ef | grep 'myProcessName' | grep -v grep | awk '{print $2}' | xargs -r kill -9

ソース:http://www.commandlinefu.com/commands/view/1138/ps-ef-grep-process-grep-v-grep-awk-print-2-xargs-kill-9

ターミナルからの「ps pipe kill」が悪い理由:

ps -ef からスクレイピングした整数のパイピング kill -9 まで 悪いことであり、二重に気分が悪いはずです.rootまたは昇格された特権を持つユーザーの場合、プロセスにソケット接続をきれいにシャットダウンし、一時ファイルをクリーンアップし、その子にそれを通知する機会が与えられないためです終了するか、端末の特性をリセットします。

代わりに 15 を送信し、1 秒か 2 秒待ち、それが機能しない場合は 2 を送信し、それが機能しない場合は 1 を送信します。 P>

一般原則として、生け垣のトリミングに Unix Railgun は使用しません。 https://porkmail.org/era/unix/award.html#kill

上記のコマンドの説明:

ps -ef このユーザーに表示されるコンピューター上のプロセス ID のリストを生成します。パイプ grep は、その文字列を含む行をフィルタリングします。 grep -v grep grepを実行しているプロセス自体に一致しないと言います。パイプ awk print は、デフォルトの区切り文字の空白で行を分割し、プロセス ID である 2 番目の列にフィルターをかけることを示しています。パイプ xargs は新しいプロセスをスピンアップして、これらすべての pid を kill -9 に送信します。 、それらすべてを終了します。

なぜps pipe kill 悪い、危険、醜い、ハックです:

<オール>
  • ps -ef により、誤ってオペレーティング システムを終了させたり、無関係なプロセスで未定義の動作を引き起こしたりして、システム全体が不安定になる可能性がわずかにあります。 何千ものプロセスがリストされており、サードパーティのプロセスがプロセス名を共有しているかどうか、または読み取りと実行 kill -9 の間にプロセス ID が別のものに変更されていて、ランダムに終了したかどうかはわかりません。あなたのものとは関係のない必要なプロセス。

  • 強制終了されるコードがデータベース操作を行っている場合、または競合状態の可能性が低いトランザクションを保護している場合、そのトランザクションのアトミック性が何パーセントかの割合で破壊され、未定義の動作が発生します。 kill -9 は囚人を取りません。コードがこれに敏感な場合は、 xargs kill を置き換えてみてください グレースフル シャットダウンを要求する送信済みフラグを含む部分、およびその要求が拒否された場合にのみ、kill -9 への最後の手段

  • でも すべてのリスクを理解し、一意の名前でそれらを制御し、いくつかのトランザクションのドロップや時折の破損に問題がなければ、99.9% の確率で問題ありません。問題がある場合は、コンピューターを再起動し、プロセスの衝突がないことを確認してください。テクニカル サポート スクリプト「コンピューターを再起動してみましたか」をレベル 5 のミームにするのは、このようなコードのためです。 "ローグ ロボットが ps をこすり落としました 整数を見つけて kill -9 に送りました 、コンピュータを再起動して問題を解決してください。

    なぜ pkill を使わないのか どちらが簡単ですか?

    上記は ps であるため、手動で制御できます 、 grepawkkillxargs マルチプラットフォーム標準です。どの正規表現エンジンを使用するか、プロセス名のどの部分を照合するか、大文字と小文字の区別と例外管理の処理を完全に制御できます。

    pkill -f -e -c myProcessName
    

    私にも同じことをしますが、man pkill を参照してください Linux、Mac、Zune-Bash、および私のオープンソースルーターのバリアント間で、異なる動作、フラグ、および正規表現エンジンがあります。そうです、35000 ワットの Unix-Railgun を有能な pkill の手に渡して、垣根を整えてください。何が起こるか見てください。


    pkill -f を使用 、コマンド ラインの任意の部分のパターンに一致

    pkill -f my_pattern
    

    うまくいかない場合に備えて、これも使用してみてください:

    pkill -9 -f my_pattern
    

    Linux
    1. Bashで特定のタイムアウト後に子プロセスを強制終了する方法は?

    2. zshですべてのバックグラウンドプロセスを強制終了するには?

    3. 単一のコマンドラインですべての PHP-FPM プロセスを強制終了する方法

    1. Linuxでゾンビプロセスを強制終了する方法

    2. pgrep によって返されたすべてのプロセスを強制終了する方法

    3. Ctrl+C を使用して、Bash スクリプトで開始されたすべてのバックグラウンド プロセスを強制終了する方法は?

    1. ゾンビプロセスとは何ですか?ゾンビプロセスを見つけて殺す方法は?

    2. 名前にフレーズが含まれているプロセスを強制終了する方法は??

    3. PID ではなく名前でプロセスを強制終了するにはどうすればよいですか?