我想知道这是否是执行系统进程并从父进程分离的正确方式,同时允许父进程退出而不创建僵尸进程和/或杀死子进程。我目前正在使用subprocess模块,并进行以下操作...
os.setsid()
os.umask(0)
p = subprocess.Popen(['nc', '-l', '8888'],
cwd=self.home,
stdout=subprocess.PIPE,
stderr=subprocess.STDOUT)
os.setsid()函数会改变进程组,这也就是当父进程退出时让子进程继续运行的原因,因为它不再属于同一进程组。
这种做法可靠吗?
基本上,我有一个远程控制工具通过套接字通信并允许远程启动进程,但我必须确保如果远程控制死亡,它启动的进程可以继续正常运行。
我正在阅读关于双重forks的文章,不确定是否需要这样做,或者subprocess.POpen close_fds是否可以解决问题,只需要改变进程组吗?
谢谢。
Ilya