Linux 如何匹配和终止特定进程,而不意外地包括不相关的进程?

Linux 如何匹配和终止特定进程,而不意外地包括不相关的进程?,linux,shell,ps,false-positive,Linux,Shell,Ps,False Positive,我有两个Tomcat进程,一个叫做eventws,另一个叫做appeventws。有时我需要从shell脚本中终止事件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

我有两个Tomcat进程,一个叫做
eventws
,另一个叫做
appeventws
。有时我需要从shell脚本中终止
事件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
每个命令都精确匹配可执行文件名为
事件ws
的进程(
-x
)(无论启动可执行文件时是否使用了目录路径前缀)

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

pgrep
仅打印匹配的PID(进程ID)),而
pkill
将终止匹配进程


相反,如果需要通过完整命令行的一部分进行匹配,请将
-f
选项与正则表达式一起使用:


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

pgrep
/
pkill
是在这种情况下使用的最佳工具,而不是
ps

 pgrep -x event-ws   # match by executable filename 'event-ws'; print PID
 pkill -x event-ws   # match and kill
每个命令都精确匹配可执行文件名为
事件ws
的进程(
-x
)(无论启动可执行文件时是否使用了目录路径前缀)

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

pgrep
仅打印匹配的PID(进程ID)),而
pkill
将终止匹配进程


相反,如果需要通过完整命令行的一部分进行匹配,请将
-f
选项与正则表达式一起使用:


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

太好了!谢谢你的帮助和耐心。太好了!谢谢你的帮助和耐心。