linux - 如何在不意外包含不相关进程的情况下匹配并终止特定进程?

标签 linux shell ps false-positive

我有两个 Tomcat 进程,一个叫做 event-ws,另一个叫做 app-event-ws。我有时需要从 shell 脚本中终止 event-ws:

ps -ef | grep -w event-ws | grep -v grep

以上将找到并杀死他们两个;我怎样才能准确找到其中之一?

最佳答案

pgrep/pkill 是在这种情况下使用的最佳工具,代替 ps:

 pgrep -x event-ws   # match by executable filename 'event-ws'; print PID
 pkill -x event-ws   # match and kill

每个命令匹配可执行文件名event-ws的进程完全(-x) (无论启动可执行文件时是否使用了目录路径前缀)。

但是请注意,您的 pgrep/pkill 实现可能会将名称限制为 15 个字符 - 无论是在匹配时还是在其输出中。

pgrep 只是打印匹配的 PID(进程 ID),而 pkill 杀死 匹配过程。


相比之下,如果您需要通过完整命令行的一部分进行匹配,请使用带有正则表达式的-f选项:

pgrep -f '/event-ws/' # match by part of the full command line; print PID and name
pkill -f '/event-ws/' # match and kill

如果将 -l 添加到 pgrep 命令,则会打印匹配进程的完整命令行,而不仅仅是进程名称。

关于linux - 如何在不意外包含不相关进程的情况下匹配并终止特定进程?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42917769/

相关文章:

linux - cronjob等待理解

linux - Shell - 从日期中减去一个整数

linux - inotify + stdout 管道 - 输出在管道中丢失

c - 如何在 C 程序中设置命令行参数,以便在用户键入 "ps aux"时可见?

java - Hadoop MapReduce ClassNotFoundException 错误

c - nm 命令输出中的奇怪符号名称

linux - 如何确定 linux 中空格的确切字符?

linux - rpm 大小不同,提取的内容相同

python - 如何在 Python 中获取进程列表?

python - 在进程列表中避免相关进程