0

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

你能建议我一种正确的方式来控制我的流程吗?ps -auxww 或具有线程数的 pid 文件。也许在 Python 库中存在现成的解决方案?

谢谢!

4

2 回答 2

1

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

所以你可以这样:

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()
于 2013-10-05T22:00:01.827 回答
0

尽管这不能回答您提到 cron 的问题部分,因此它不能解决您的问题,但我认为处理您的进程的正确方法是使用子进程,或者使用python 的 multiprocessing 模块,或者使用python 的 fork() 和 waitpid()实现(当然你可以使用线程,但在某些平台下它们不会利用多核和 CPU,所以它们可能不符合你的兴趣)。

我知道这不符合您对具体问题的描述,但您可以牢记这一点并相应地设计您未来的程序。

于 2013-10-11T14:26:46.417 回答