【发布时间】:2015-12-20 22:44:09
【问题描述】:
我在使用 subprocess 模块通过 Python 打开完全独立的进程时遇到了问题。即使 python 程序死了,我也需要 python 脚本生成的进程继续存在。我注意到 subprocess 创建了一个子进程,而 nohup 并没有使其保持活动状态。它需要在 Windows 和 Linux 上都可以工作,所以我不确定 os.fork 是否可以工作。
我的目标是一个始终运行的主程序,它调用其他程序,如果主程序死了,我希望衍生的程序继续存在。
主程序
import subprocess
import time
subprocess.Popen(["/usr/bin/python", "/home/jchoinski/Desktop/Sentinel1.1/programTest.py"], stdin=subprocess.PIPE, stdout=PIPE, stderr=PIPE)
while True:
time.sleep(1)
衍生程序
import time
l = 1
while l < 100000:
l += 1
print(l)
time.sleep(1)
进程树如下所示:
主程序
|_调用程序
我希望它看起来像:
主程序
调用程序
有什么想法吗?我什至应该为此使用子流程吗?
【问题讨论】:
-
第一个链接不会产生独立进程,第二个链接不适用于 *nix 系统。
-
不知道如何做到独立于平台,但en.wikipedia.org/wiki/Nohup 和这个stackoverflow.com/questions/285015/… 有一些一般的线索。
-
除非你从管道中读取数据,否则不要使用
PIPE。 Usesubprocess.DEVNULLinstead。此外,明确使用close_fds=True(Python 2 需要它)。它还应该解决“nohup 无法保持活力”的问题。
标签: python python-2.7 subprocess popen