我如何才能终止名称中带有短语的进程?

我如何才能终止名称中带有短语的进程?

我需要终止myName描述中包含以下内容的进程。目前我正在执行:

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

如何在不输入 PID 的情况下使用一个命令执行相同操作?

答案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

有两个非常简洁的命令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

相关内容