我有一个python irc bot,我通过做/etc/init.d/phenny start
作为根启动。有时它会死亡,但它似乎在一夜之间发生。如何检查Linux进程以确定进程何时/何时终止/终止?
我能做些什么来检查它并查看文本文件中的进程状态?
我有一个python irc bot,我通过做/etc/init.d/phenny start
作为根启动。有时它会死亡,但它似乎在一夜之间发生。如何检查Linux进程以确定进程何时/何时终止/终止?
我能做些什么来检查它并查看文本文件中的进程状态?
如果您对真正低级别的进程活动感兴趣,可以在strace下运行python解释器,将标准错误重定向到文件。
如果你只在检查Python代码时,你的机器人崩溃兴趣的话,你必须在碰撞发生源的位置,你可以用该位置与except
子句中try
/except
和break into the debugger:
import pdb; pdb.set_trace()
虽然你可能需要在非守护模式下运行你的僵尸工具。
如果您知道它仍然在运行,您可以将它堆叠起来以查看它的回传。我不确定这将是多么有用,因为你会看到解释器的调用堆栈。你也可以像别人提到的那样尝试strace或ltrace。
我也会确保在脚本运行的任何环境中,你已经设置了ulimit -c unlimited,以便在python中生成一个核心的时候它会彻底崩溃。
我可能会尝试的另一件事是由不等待它的孩子执行此作业。这应该会导致proc表条目作为僵尸存在,即使当潜在的工作已经退出时也是如此。
你可能想尝试Python psutils,这是我已经使用和工作的东西。
一种廉价的方式来获得有关该问题的一些额外的线索将开始phenny与
/etc/init.d/phenny start 2>/tmp/phenny.out 1>&2
当它崩溃,检查/tmp/phenny.out的尾巴Python的回溯。
如果您只需要验证进程正在运行,你可以只运行一个脚本来检查命令
PS AX的输出| grep [p] henny
每隔几秒钟。如果它是空的,那么显然这个过程是死的。