次のコマンドで生成されたすべてのプロセスを終了したいと思います。

次のコマンドで生成されたすべてのプロセスを終了したいと思います。

次のコマンドは、実行中のすべてのPIDを表示しますvmstat1

ps -ef | grep "vmstat 1" | awk '{ print $2 }'

私の質問は、同時に20人がいればどうやってそれらを殺すことができるかということです。

答え1

コマンドがPIDリストを生成する場合は、パイプで接続するだけです。

xargs kill

あなたのコマンドはgrepコマンドとも一致するので、|grep -v grep元のコマンドgrepの前にこのようなものを追加することを検討してください。

答え2

標準コマンドpkillではありませんが、多くのUnicesで見つかり、このタイプの操作に特に使用されます。

pkill -f 'vmstat 1'

また、あなたgrepの意志は、(上記の場合と同様に)との親セットvmstat 1とも一致します。より強力になるには、次のようにします。vmstat 10grep vmstat 1pkillawkgrep

ps -Ao pid,args | awk '$2 == "vmstat" && $3 == "1" {print $1}' | xargs kill

または

pkill -xf 'vmstat 1'

答え3

すでにawkを使用している場合は、次のことができます。

ps -ef | grep "vmstat 1" | awk '!/grep/{ print "kill " $2 }' | bash

終了するコマンドのリストを出力し、各コマンドがプロセスを終了するので、潜在的な引数リストが長すぎることはありません(プロセスを実行するときはそうではありませんが)。一致を防ぐためのパターンを追加しました。 grepプロセス自体を終了すると、リストが短くなる可能性があります。

答え4

とても簡単です:

$ kill -9 $(pgrep -f vmstat)

関連情報