此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
标签:bash,grep,ps,linux