web-dev-qa-db-ja.com

与えられた名前ですべてのプロセスを強制終了するにはどうすればいいですか?

私が手に入れたすべてのプロセスを強制終了したいのですが。

ps aux | grep my_pattern

どうやってするの?

これは動作しません:

pkill my_pattern
500
Łukasz Lew

pkill -fを使用します。これは、コマンドラインの任意の部分のパターンと一致します。

pkill -f my_pattern
1099
Dor Shemer

文字列 "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 -efは、このユーザーに見えるコンピュータ上のプロセスIDのリストを作成します。パイプgrepは、その文字列を含む行に対してそれをフィルタリングします。 grep -v grepは、グリップを行っているプロセス自体とは一致しないと言っています。 pipe awk printは、デフォルトの区切り文字の空白で行を分割し、私たちのプロセスIDである2番目の列にフィルタをかけると言っています。パイプxargsは、それらすべてのpidをkill -9に送信するための新しいプロセスをスピンアップし、それらをすべて終了します。

上記のコードは、いくつかの理由で悪く、危険で、見苦しく、そしてハッキングです。

  1. 強制終了されるコードが、低い確率の競合条件でデータベース操作または安全なトランザクションを実行している場合、何パーセントかの時間割合で、そのトランザクションの原子性が破壊され、未定義の動作が発生します。 kill -9は囚人を連れて行きません。あなたのコードがこれに敏感な場合は、xargs killの部分をグレースフルシャットダウンを要求する送信済みフラグに置き換えてみてください。その要求が拒否された場合にのみ、最後にkill -9を使ってください。

  2. ps -efは存在する可能性のあるすべてのプロセスをリストしているため、オペレーティングシステムを誤って終了させたり、無関係なプロセスで未定義の動作を引き起こしたりする可能性があります。あなたのプロセス名、あるいはread-killからkill -9までの間にprocessidが他のものに変更されたため、意図しないランダムなプロセスを誤って終了しました。

しかし、 非常にユニークな名前でリスクとコントロールを理解していて、トランザクションがいくつかドロップされたりデータが壊れたりすることがあっても問題ない場合は、99.9%の時間で問題ありません。問題がある場合は、コンピュータを再起動し、プロセスの衝突がないことを確認してください。これは、テクニカルサポートスクリプト「コンピュータを再起動してみましたか」をレベル5ミームにする、このようなコードが原因です。

114
Eric Leschinski

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

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

Grep -eなどを使うことができます。

50
Eugen Rieck

次のコマンドを使ってプロセスを一覧表示できます。

ps aux | grep -c myProcessName 

あなたがそのプロセスの数をチェックする必要があるならば、実行してください

ps aux | grep -c myProcessName |grep -v grep 

その後、を使用してプロセスを強制終了できます。

kill -9 $(ps aux | grep -e myProcessName | awk '{ print $2 }') 
16
Nived Thanima

killall -r my_patternも使えます。-rプロセス名のパターンを拡張正規表現として解釈します。

killall -r my_pattern
10
Alex

あなたがpkill -f PATTERNを少し危険すぎると判断した場合、私は ezkill bashスクリプトを書きました。

7
kraymer

プロセスIDを見つけるのが面倒な場合は、正規表現を使用して名前でプロセスを強制終了します。たとえば、chromeを強制終了するには、次のコードが役立ちます。

killall -r --regexp chrome

4
ajaz

次のコマンドを使うと

kill -9 $(ps aux | grep 'process' | grep -v 'grep' | awk '{print $2}')
4
Alex Liu

次のコマンドを使用して、

ps -ef | grep -i myprocess | awk {'print $2'} | xargs kill -9

または

ps -aux | grep -i myprocess | awk {'print $2'} | xargs kill -9

わたしにはできる。

2
Luis Lopes

悪いね?

 pkill `pidof myprocess`

例:

# kill all Java processes
pkill `pidof Java`
1
user6482587

' pkill 'をサポートしていないサーバーでそれを実行するための最良の方法を見つけました

" kill -9 $(ps ax | grep My_pattern | fgrep -v grep | awk '{print $ 1}') "

ループする必要はありません。

0
Magige Daniel

killと一緒にpgrep -fを使用するのが最善かつ最も安全です、または単にpkill -fgreping psの出力が間違ってしまう可能性があります。

ps | grepを追加したりパターントリックを使用したりしてgrep行を除外する必要がある| grep -vを使用するのとは異なり、pgrepは意図的に選択されることはありません。

さらに、パターンがpsUID/USERSDATE/START、またはその他の列に表示された場合、不要なプロセスが出力に表示されます。殺してください、pgrep + pkillこの欠陥に苦しんではいけません。

また、私はkillall -r/-regexpが私の正規表現ではうまくいかないことを発見しました。

pkill -f "^python3 path/to/my_script$"

man pkill

0
Wis