web-dev-qa-db-ja.com

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

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

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

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

59
Mark Howard

pgrep/pkill取る-f 国旗。 manページから:

-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
75
Michael Mrozek

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

4
Jan Henke

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

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

Pkillなどがない場合は、proc/[1-9] */cmdlineを使用してください。

grep -a myapp.jar /proc/[1-9]*/cmdline|tr '\0' ' '|grep -v grep|awk -F/ '{print $3}'
0
ikrabbe