问题描述
我想使用linux命令pkill -f“ a.py”杀死一个python程序,但这也杀死了其他同名程序。
例如:
如果我想使用命令pkill -f "a.py"
杀死a.py。它还会杀死名称为ab.py
解决方法
首先,您最初描述的问题无法重现。我用无限循环创建了a.py
和ab.py
,然后在两个终端中同时运行a.py 2
和ab.py
,然后pkill -f 'a\.py'
杀死了两个进程之一,如预期的那样。如果我将第二个文件命名为b.py
,也会发生同样的情况。即使我忘了逃脱圆点,实际上也会发生同样的情况。
对于注释中的澄清,您只是使用了错误的模式。
完整命令a.py 2
和a.py 25
都满足您的模式。因此应为pkill -f 'a\.py 2$'
(请注意转义点以避免适合任何意外的字符,请添加美元符号以说明该模式以2结尾,而后面的5则不属于该字符)
参考man pkill
:
-f,--full模式通常仅与进程名称匹配。设置-f时,将使用完整的命令行。
OPERANDS
模式
指定扩展正则表达式以与进程名称或命令行进行匹配。
这里重要的一点是您的参数的行为类似于正则表达式,而不是简单的字符串模式。
,如何使用ps
查看过程?
然后,您将看到~path python3 a.py
之类的流程命令名称及其运行时间。
因此,您可以确定要杀死的进程,只需执行kill process_num