我对UNIX下正确的进程控制有一个疑问。 我有FreeBSD 8.0服务器和python应用程序。我需要启动我的python应用程序进程3次(client.py脚本)。如果试图通过cron启动第4个进程,他必须执行sys.exit()。Python进程控制?
你能否建议我一个正确的方法来控制我的过程? ps -auxww或带有线程数的pid文件。也许在Python库中存在一个现成的解决方案?
谢谢!
我对UNIX下正确的进程控制有一个疑问。 我有FreeBSD 8.0服务器和python应用程序。我需要启动我的python应用程序进程3次(client.py脚本)。如果试图通过cron启动第4个进程,他必须执行sys.exit()。Python进程控制?
你能否建议我一个正确的方法来控制我的过程? ps -auxww或带有线程数的pid文件。也许在Python库中存在一个现成的解决方案?
谢谢!
在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()
不错的例子,感谢罗兰! – xercool
尽管这不会回答你的问题指的cron的一部分,因此它不能解决你的问题,我认为正确的方式来处理您的流程将使用子进程,或者使用python's multiprocessing module或使用python's fork() and waitpid()实现(当然,您可以使用线程代替,但它们不会在某些平台下利用多个内核和CPU,但它们可能不是您的兴趣)。
我知道这不符合您的具体问题的描述,但您可以记住它并相应地设计您的未来计划。
不幸的是,我不认为有* pythonic *这样做的方式,至少没有据我所知。你可以看看http://semanchuk.com/philip/posix_ipc/关于如何在Python中使用共享内存和信号量,但不确定这是否是最好的解决方案。 – Blubber