名前に一致するすべてのプロセスを強制終了する方法は?


260

amarokという単語を含むすべてのプロセスを終了したいとします。実行したいコマンドを出力できます。しかし、実際にシェルにそれらを実行させるにはどうすればよいですか。すなわち。

ps aux | grep -ie amarok | awk '{print "kill -9 " $2}'
Output:
kill -9 3052
kill -9 3071
kill -9 3076
kill -9 3077
kill -9 3079
kill -9 3080
kill -9 3082
kill -9 3083
kill -9 3084
kill -9 3085
kill -9 3086
kill -9 3087
kill -9 3088
kill -9 3089
kill -9 4031

| sh -xコマンドラインの残りの後に追加しますか?
ジョナサンレフラー、2011年

7
kill -9プロセスで使用することはありません。[プロセス管理] [1] [1]を参照してください:mywiki.wooledge.org/… ...
Fredrik Pihl

上記のコメントに加えて、kill -9は悪い考えであるだけでなく、名前を使用して複数のプロセスをkillしようとしているという事実もあります。プロセスの名前に固有のものは何もないため、識別の候補としては適していません。
ラウル

それは殺すだろうamarokxあまりにもプロセスを?私はviを殺しsupervisorctlます、それは単語に `vi 'を含むものを殺し ます。
2015

4
使用しないことに関するその記事-9はかなり役に立たない-人々がそれを使用すべきでない理由についてのより良い情報はありますか?それは単に「いけない、それを使う人々を解雇する」と言うだけです。しかし、私が他のどこでも見たことがあるのkill -9 {pid}は、それが何かを殺す方法だということだけです...
dwanderson

回答:


438

から man 1 pkill

-f     The pattern is normally only matched against the process name.
       When -f is set, the full command line is used.

これは、たとえば、次の行が表示される場合を意味しps auxます。

apache   24268  0.0  2.6 388152 27116 ?        S    Jun13   0:10 /usr/sbin/httpd
apache   24272  0.0  2.6 387944 27104 ?        S    Jun13   0:09 /usr/sbin/httpd
apache   24319  0.0  2.6 387884 27316 ?        S    Jun15   0:04 /usr/sbin/httpd

pkill -fオプションを使用して、それらすべてを強制終了できます。

pkill -f httpd

1
これはこの質問の主題に対応しているわけではありませんが、あなたがしようとしていることを実行するための代替の、より短い方法を示しています。
Tim Bielawa

19
追加の強度の-9ために、最後に追加してください!
mlissner 2015

それは殺すだろうhttpdxあまりにもプロセスを?私はviを殺しsupervisorctlます、それは単語に `vi 'を含むものを殺し ます。
Gank

すばらしい-Ubuntu 18.04.1 LTS
SalathielGenèse18年

大文字と小文字を区別しない一致の場合-i、などを使用しますpkill -fi wine。前後を確認するには、を使用しますps uax | grep -i wine
バルカンレイヴン

207
ps aux | grep -ie amarok | awk '{print $2}' | xargs kill -9 

xargs(1):xargs-引数リストを作成し、ユーティリティを実行します。参考あなたのような何かへの引数でパイプにしたいときkilllsかにそう。


3
xargsについて言及するためのポイント-このすべてのpgrep / pkillのものはすべて非常に優れていますが、xargsは汎用ツールであり、すべてのlinux / unixの標準です。
chrisdowney

4
「kill:No
such

3
Cerinは、すでに終了しているgrepプロセスも強制終了しようとしているためです。それは大丈夫です。
コスティムラル2014年

6
grepプロセスのキャプチャを回避するには、ちょっとしたコツがあります。psaux | grep -ie [a] marok | awk '{print $ 2}' | xargs kill -9
RCross '25 / 09/25

8
別のgrep呼び出しを追加して、grepをフィルターで除外することもできます(これは読みやすく、覚えやすいと思います)ps aux | grep -ie amarok | grep -v grep | awk '{print $2}' | xargs kill -9 (のgrep -vgrep --invert
driftcatcher

47

使用する pgrep

kill -9 $(pgrep amarok)

26
さらにpkill -9 amarok
エレガント

1
pkillは、追加のパイプまたはプロセスを作成することなく、「単語<word>を含むすべてのプロセス」の部分をネイティブに処理します。pgrepの必要性をなくすための完全なプロセス名検索については、-fオプションを参照してください。
ティム・ビエラワ

2
デフォルトでは、pkillはプロセス名の部分一致を許可することに注意してください。このコマンドは、amarok2が存在する場合、それも強制終了します。正確な名前を指定する場合は、-xまたは-fを使用します。
user79878 14

pgrepと一致しない場合は失敗します
alfredocambera

氏名一致の使用kill -9 $(pgrep -f amarok)
cinatic

27

これを行う安全な方法は次のとおりです。

pkill -f amarok

1
これに追加するために、-lフラグを追加しました。私は実際に別名pkillを付けただけpkill -flなので、次のようなものを実行できますpkill jboss。それにより、強制終了したプロセスが吐き出されます。
nland 2015

それは殺すだろうamarokxあまりにもプロセスを?私はviを殺しsupervisorctlます、それは単語に `vi 'を含むものを殺し ます。
Gank

これはトップ(ティム)の回答とどう違うのですか?例の名前と一致するだけです。@ pkill: invalid option -- 'l'ndland-procps-ng 3.3.12のpkill
Xen2050

18

このコマンドkillallはまさにあなたが必要としているものだと思います。コマンドは「プロセスを名前で殺す」と説明されています。使いやすいです。たとえば

killall chrome

このコマンドはChromeのすべてのプロセスを強制終了します。killallコマンドに関するリンクは次のとおりです

http://linux.about.com/library/cmd/blcmdl1_killall.htm

このコマンドがお役に立てば幸いです。


これは名前でのみ一致し、完全なコマンドラインでは一致しません。間違いなくps aux
search

12

pkill -xは、プロセス名と完全に一致します。

pkill -x amarok

pkill -fも同様ですが、正規表現パターンを使用できます。

他のパラメーター(-x、-fなど)を指定しないpkillは、プロセス名の部分一致を許可することに注意してください。したがって、「pkill amarok」は、amarok、amarokBanana、bananaamarokなどを殺します。

-xがデフォルトの動作であるといいのですが!


それは殺すだろうamarokxあまりにもプロセスを?私はviを殺しsupervisorctlます、それは単語に `vi 'を含むものを殺し ます。
ガンク

@Gank、はい、「amarok」がどこかに含まれているプロセス名。
user79878

amarokxではなくamarokのみを殺す方法は?
Gank

1
@ Gank、-xフラグ。pkill -x amarok
user79878

4

コマンドの出力を実行したい場合は、コマンドの内部$(...)に配置できますが、特定のタスクについてはkillallpkillコマンドとコマンドを確認してください。


3

また、すべてをバックティックで囲むか、$()内に置くことで、出力をサブプロセスとして評価することもできます。

`ps aux | grep -ie amarok | awk '{print "kill -9 " $2}'`

 $(ps aux | grep -ie amarok | awk '{print "kill -9 " $2}')     

3

トライキルは9 -sps -ef |grep "Nov 11" |grep -v grep | awk '{print $2}' 11月11日またはキル-s 9のプロセスを強制終了するにはps -ef |grep amarok|grep -v grep | awk '{print $2}' 単語のamarokが含まれているプロセスを強制終了するには


0

コマンドを実行可能ファイルに追加し、+ x権限を設定して実行するのはどうでしょうか?

ps aux | grep -ie amarok | awk '{print "kill -9 " $2}' > pk;chmod +x pk;./pk;rm pk

-1

cygwinまたは不足している最小限のシェルをkillall使用している場合は、次のスクリプトを使用できます。

killall.sh-プロセス名で強制終了します。

#/bin/bash
ps -W | grep "$1" | awk '{print $1}' | xargs kill --

使用法:

$ killall <process name>

取得していますkill: invalid argument f
rosstex

1
-fを-に置き換えてみてください
Tony O'Hagan
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.