2013-10-02 54 views
0

我对UNIX下正确的进程控制有一个疑问。 我有FreeBSD 8.0服务器和python应用程序。我需要启动我的python应用程序进程3次(client.py脚本)。如果试图通过cron启动第4个进程,他必须执行sys.exit()。Python进程控制?

你能否建议我一个正确的方法来控制我的过程? ps -auxww或带有线程数的pid文件。也许在Python库中存在一个现成的解决方案?

谢谢!

+0

不幸的是,我不认为有* pythonic *这样做的方式,至少没有据我所知。你可以看看http://semanchuk.com/philip/posix_ipc/关于如何在Python中使用共享内存和信号量,但不确定这是否是最好的解决方案。 – Blubber

回答

1

在FreeBSD中,ps在其输出中显示命令行。因此,对于Python schript,这是解释器的名称,后跟脚本的名称。两者都可以是完整路径或只是程序名称。

所以,你可以像这样:

import subprocess 
import sys 

scriptname = 'foo' 
procs = subprocess.check_output(['ps', '-xa']).splitlines() 
count = len([l for l in procs if 'python' in l and scriptname in l]) 
if count > 3: 
    sys.exit() 
+0

不错的例子,感谢罗兰! – xercool

0

尽管这不会回答你的问题指的cron的一部分,因此它不能解决你的问题,我认为正确的方式来处理您的流程将使用子进程,或者使用python's multiprocessing module或使用python's fork() and waitpid()实现(当然,您可以使用线程代替,但它们不会在某些平台下利用多个内核和CPU,但它们可能不是您的兴趣)。

我知道这不符合您的具体问题的描述,但您可以记住它并相应地设计您的未来计划。