我不知道这是否是执行系统进程,并从母公司分离的正确途径,但允许家长从退出而不创建一个僵尸和/或杀死子进程.我目前正在使用子进程模块并执行此操作...
os.setsid()
os.umask(0)
p = subprocess.Popen(['nc', '-l', '8888'],
cwd=self.home,
stdout=subprocess.PIPE,
stderr=subprocess.STDOUT)
Run Code Online (Sandbox Code Playgroud)
os.setsid()更改了进程组,我认为这是让进程在父进程退出时继续运行的原因,因为它不再属于同一进程组.
这是正确的,这也是一种可靠的执行方式吗?
基本上,我有一个远程控制实用程序,通过套接字进行通信,允许远程启动进程,但我必须确保如果远程控制器死亡,它启动的进程继续运行不受影响.
我正在阅读关于双叉并且不确定这是否必要和/或subprocess.POpen close_fds以某种方式处理这个问题,所需要的只是更改进程组?
谢谢.
伊利亚
所以定期的clojure repl工作正常,(read-line)收集输入,然后回应它.lein repl虽然使用,但从不回应任何输入字符,也不允许我从任何stdin读取命令返回.
我确定它与重新绑定有关,但是想知道是否有解决方法/修复?
谢谢.