
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 つの非常に便利なコマンドがありpgrep
、pkill
これらを使用すると、検索語またはコマンド名の一部を入力でき、プロセスの 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
。