【发布时间】:2011-08-11 23:41:00
【问题描述】:
我想知道这是否是执行系统进程并与父进程分离的正确方法,尽管允许父进程退出而不创建僵尸和/或杀死子进程。我目前正在使用 subprocess 模块并执行此操作...
os.setsid()
os.umask(0)
p = subprocess.Popen(['nc', '-l', '8888'],
cwd=self.home,
stdout=subprocess.PIPE,
stderr=subprocess.STDOUT)
os.setsid() 改变了进程组,我相信这是让进程在父进程退出时继续运行的原因,因为它不再属于同一个进程组。
这是正确的,也是一种可靠的执行方式吗?
基本上,我有一个远程控制实用程序,它通过套接字进行通信并允许远程启动进程,但我必须确保如果远程控制死机,它启动的进程继续运行不受影响。
我正在阅读有关双分叉的信息,但不确定这是否有必要和/或 subprocess.POpen close_fds 以某种方式解决了这个问题,只需要更改进程组?
谢谢。
伊利亚
【问题讨论】:
标签: python linux unix subprocess