pid ではなく名前で複数のプロセスを強制終了する

pid ではなく名前で複数のプロセスを強制終了する

Ubuntu Server 14.04 でコマンドのコピーを 2 ~ 5 個実行するジョブがあります。

kill私はそれらすべてに対して最もシンプルな方法(つまり、可能であればスクリプトではなく単一のコマンドライン)を見つけようとしています。本当のコツは、私が使用していることですアンシブル数十台のサーバーにアドホック コマンドを送信するため、各プロセスを呼び出すのに時間がかかります。

例:

ps aux | grep bash 
user 1031 0.0 0.0  4444  652 ?      Ss  Aug15 0:00 /bin/sh -c /home/user/start-cacheable.bash
user 1032 0.0 0.1 12400 1432 ?      S   Aug15 0:00 /bin/bash /home/user/start-cacheable.bash
user 1327 0.0 0.3 12744 2254 tty1   S   Aug15 0:00 -bash

さて、ここからは を実行しますkill 1031 1032。この作業を完了できるクリーンなコマンドはありますか?

答え1

@jjlin の回答が役に立つかもしれません。

pgrep/pkillしかし、との働きを説明するとkillall

キルオールは探すプロセス名唯一の - それは/proc/<pid>/comm

pgrep/pkillはデフォルトで同じことを行いますが、引数の一致も検索することができます(-f)。これにより、/proc/<pid>/cmdline

基本的に、デフォルトでは に表示される文字列のみps -Aが考慮されます。

例:

process name (comm): sshd
full command/arguments (cmdline): /usr/sbin/sshd -f /etc/ssh/sshd_config

今 - はkilall/pkil sshd動作します(意図的なタイプミスなので、しないでください;)
killall /usr/sbin/sshdうまくいかないパスはプロセス名の一部ではないため、(つまりpkill -f)
で確認できます。pgrep -lf sshd_config

次に、考慮すべき他の事項を示します。Killallコマンド名の最初の 15 バイトのみに一致する可能性がある (を参照killall -e)、正規表現が必要かどうか、プロセス グループを活用するかどうかなどです。

注意: /proc/... ファイルは null で区切られているため、コピー/貼り付けの際には注意してください。

答え2

これを使えばいいですよ。

ps aux | grep <your keyword> | grep -v grep | awk  '{print $2}' | xargs kill -9

一致するプロセスを一覧表示し、grep プロセス自体を除外し、PID を取得して、kill -9 に渡します。

キルを使用する前にテストしてください -9

答え3

試す

pkill start-cacheable.bash

答え4

使用できます

killall <process name>

関連情報