2012-07-27 32 views
2

我有一个使用psutil运行一些各种twistd ...命令的Python程序。 twistd产生并守护进程并写入foo.pid,我可以从中读取该pid。如何可靠地获取扭曲衍生过程的pid?

它还会设置为在进程终止时清除此pid文件,这意味着生成的进程可能完成得太快而无法读取pid。

twistd如果无法写入pid文件,它会返回一个错误代码,所以我可以假设没有pid文件并且没有扭曲的错误代码意味着进程成功并且很快终止了,但是整个过程看起来很片断。更不用说必须等待pid文件充满内容,同时还要处理充满的可能性,但又一次去除。

有没有更好的方法?

回答

2

没有更好的方法(或者如果存在,要知道它是什么非常困难或不可能,因为你没有描述你正在解决的一般问题,你只是描述了一个问题有一个你已经选择的解决方案)。尽管如此,

有一个open feature request使twistd更适合这种使用。如果你帮助解决问题,那么你就可以做到这一点。

+0

我的“已选择”解决方案只是我的最佳尝试。例如,当命令行错误时,它不能在'twistd'的最奇怪的行为之间分离,并且它返回的退出代码为零,程序结束速度非常快,这就是我问这个问题的原因。 – porgarmingduod 2012-07-29 08:59:47

+0

对不起,我想我的观点不够清楚。你为什么要启动守护进程的扭曲子进程,然后试图学习它的PID?总体目标是什么? – 2012-07-29 13:59:19

+0

一般问题是启动并监视几个扭曲的服务,在必要时将其杀死,并报告内存和CPU使用情况等。 – porgarmingduod 2012-07-30 10:43:54

0

我不确定你在使用psutil的哪个部分,但只需拨打来自Twisted的spawnProcess就会触发一个知道它的pid的IReactorProcess

如果是twistd你打电话给我,那么如果你愿意的话,肯定有办法做同样的过程。

+0

这个问题非常明确地指定了'twistd'被使用。我不是问如何创建进程,而是如何获得以'twistd'命令行开始的进程的PID。我知道我可以用'-n'来运行'twistd'来不守护它,在这种情况下,我可以使用我用psutil生成自己的过程的pid,尽管我不确定它的含义。 – porgarmingduod 2012-07-27 13:00:50

+0

谢谢,我看到它指定'twistd',这并不意味着我很清楚你在哪里使用它:)。你的问题说你正在使用'psutil'“来运行一些各种各样的命令”。这听起来像你正在产生新的过程。 (并且不,'-n'不相关) – Julian 2012-07-27 13:07:58

+0

实际上,'-n'使得使用'Popen'生成'twistd'过程是我感兴趣的过程,也就是我的' Popen产生的进程与.pid文件中的pid相同。 – porgarmingduod 2012-07-29 08:56:16