微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

linux-如何查找/杀死特定的python程序

此VM中运行两个不同的python程序

一个后台工作,他监视一个文件夹,然后“做一些事情”(有几名工人)

10835 ?        Sl     0:03 python main.py
10844 ?        Sl    34:02 python main.py
10845 ?        S     33:43 python main.py

第二个通过脚本启动

20056 pts/1    S+     0:00 /bin/bash ./exp.sh
20069 pts/1    S+     0:00 /bin/bash ./exp.sh
20087 pts/1    S+     0:10 python /home/path/second.py

我已经尝试了很多方法来找到一种只杀死主程序的方法(我想构建一个cron看门狗),但是没有成功

一个我只想找到挂起的’python main.py’进程(伴随[defunct]),但是我什至找不到单独的这个进程.

较高的是来自ps -ax(因此它们当前都在运行)
pgrep’python’返回所有PID,也来自我不想要的second.py:(没有用,因此pkill也是如此)

pgrep 'python'
10835
10844
10845
20087

pgrep’python main.py’总是返回空,pgrep’main.py;也是如此.

唯一有效的方法

ps ax | grep 'python main.py'

但这也返回了自己的PID,grepping’ps’并不是一种偏爱的解决方案.当main.py挂起时,它显示为“ python main.py [defunct]”.一种

ps ax | grep 'python main.py [defunct]'

测试总是无用的,因为它总是返回true. pgrep除了’python’以外,还返回false.我有点笨.

解决方法:

在守护程序python脚本中,您应该创建PID文件

def writePidFile():
  pid = str(os.getpid())
  f = open('/tmp/my_pid', 'w')
  f.write(pid)
  f.close()

现在杀死这个过程很简单:

kill `cat /tmp/my_pid`

或者,您可以只使用grep并过滤自己的进程:

ps ax | grep 'python main.py [defunct]' | grep -v grep

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。

相关推荐