
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>