Linux:引数に基づいてプロセスを強制終了する


55

コマンドライン引数に基づいてプロセスを強制終了するにはどうすればよいですか? killallpgrep、およびpkillプロセス名に基づいてのみ動作するようです。

これjavaは、Java仮想マシン内で実行されている多数のアプリケーションを区別できるようにするために必要です。すべてのアプリケーションのプロセス名と実際のアプリケーション名は、コマンドライン引数を調べることで確認できます。

これは手動で行うことができps aux | grep myapp.jar、出力からpidを手動で強制終了することもできますが、同等のコマンドを自動的に実行したいのですが。

回答:


70

pgrep/ 旗をpkill取る-fmanページから:

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

例えば:

$ sleep 30& sleep 60&
[1] 8007
[2] 8008

$ pkill -f 'sleep 30'
[1]  - terminated  sleep 30

$ pgrep sleep
8008

1、私はbash 4.1.5は(例の最初の行のように)アンパサンドの後にコロンのために仕事をしません... bash: syntax error near unexpected token ';'...それはで作業を行う場合のアンパサンドが続いているときの文;;...多分別のシェル(?)を使用しています
-Peter.O

@ jw013実際に使用していましたがzsh、使用した構文をサポートしています。ただし、両方とも機能しないため、削除しました
Michael Mrozek

@MichaelMrozek ok nvm then :) unix.SEのzshユーザーの割合が他の場所よりも高いのではないかと思う- zshここでユーザーを見つけるだけです。
jw013

4

を使用htopして、現在実行中のすべてのプロセスをコマンドライン引数で表示し、選択したプロセスを強制終了できます。


4

argument以下を、プロセスの完全なコマンドラインを必要とする正規表現に置き換えます。

kill `ps -eo pid,args --cols=10000 | awk '/argument/ && $1 != PROCINFO["pid"] { print $1 }'`

0

pkillなどをお持ちでない場合は、proc / [1-9] * / cmdlineを使用してください。

grep -a myapp.jar /proc/[1-9]*/cmdline|tr '\0' ' '|grep -v grep|awk -F/ '{print $3}'
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.