名前にフレーズが含まれるプロセスを強制終了するにはどうすればいいですか?

名前にフレーズが含まれるプロセスを強制終了するにはどうすればいいですか?

myName説明に含まれているプロセスを強制終了する必要があります。現在、私は以下を実行しています:

ps -ax |grep myName
I see PID
kill -9 PID

PID を入力せずに 1 つのコマンドで同じことを実行するにはどうすればよいですか?

答え1

myName終了したいプロセス/実行可能ファイルの名前の場合は、次を使用できます。

pkill myName

pkillデフォルトではSIGTERMシグナル(シグナル 15)を送信します。SIGKILLまたはシグナル 9 が必要な場合は、次のようにします。

pkill -9 myName

がプロセス名でない場合myName、またはたとえば、が別の(長い)コマンドの引数である場合、pkill(またはpgrep)は期待どおりに動作しない可能性があります。そのため、 オプションを使用する必要があります-f

からman kill

-f, --full
              The pattern is normally only matched against the  process  name.
              When -f is set, the full command line is used.
NOTES
The process name used for matching is limited to the 15 characters present
   in the output of /proc/pid/stat.  Use the -f option to match  against  the
   complete command line, /proc/pid/cmdline.

それで:

pkill -f myName

または

kill -9 $(pgrep -f myName)

答え2

コマンド名と一緒に使用:

pkill -9 myscript

コマンドラインで文字列を検索する場合:

kill -9 $(ps ax | grep myName | fgrep -v grep | awk '{ print $1 }')

警告しておきますが、上記のコマンドはSIGKILL複数のプロセスにシグナルを送信する可能性があります。

答え3

と という 2 つの非常に便利なコマンドがありpgreppkillこれらを使用すると、検索語またはコマンド名の一部を入力でき、プロセスの PID が提供されるか、( の場合pkill) そのプロセスが強制終了されます。

$ pgrep -f firefox                                                             
23699

pkillフラグを付けて同じコマンドを実行すると、-fすべての Firefox ウィンドウが閉じます。

この-fフラグは、プロセスの完全なコマンドラインを検索する場合に特に必要です。

答え4

for loop次のように、特定のプロセス名に関連付けられているすべての PID を簡単に調べることができます。

$ for i in $( ps ax | awk '/[m]yName/ {print $1}' ); do kill ${i}; done

これにより、 という単語を含むすべてのプロセスが強制終了されますmyName

関連情報