Linux 如何匹配和终止特定进程,而不意外地包括不相关的进程?
我有两个Tomcat进程,一个叫做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
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
命令,则会打印匹配进程的完整命令行,而不仅仅是进程名称。太好了!谢谢你的帮助和耐心。太好了!谢谢你的帮助和耐心。