我在使用 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 操作系统并在开头附加“nohup”(如果为真)来获得我想要的东西。 Windows 不会终止子进程,所以它成功了。
