当pexpect会话结束时,进程会死亡

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了当pexpect会话结束时,进程会死亡相关的知识,希望对你有一定的参考价值。

我正在使用pexpect在内部应用程序上运行启动命令。 start命令启动许多进程。当进程在后台逐个开始时,一切看起来都很好,但是当'start'进程完成并且pexpect进程结束时,已经启动的进程也会死掉。

child = pexpect.spawn('foo start')
child.logfile = log
child.wait()

对于这种情况,我可以使用nohup,它按预期工作。

child = pexpect.spawn('bash -c "nohup foo start"')

但是,同一个内部应用程序的安装程序也存在相同的问题,安装的一部分是启动进程。安装程序是交互式的,需要输入,因此nohup不起作用。

当pexpect会话结束时,如何防止安装程序启动的进程死亡?

注意:从标准终端会话执行时,启动和安装过程可以正常工作。它们不以任何方式与会话联系在一起。

答案

我在文档中找不到相关内容,但在spawn命令中包含“ignore_sighup = True”选项修复了我的问题。

child = pexpect.spawn('foo start', ignore_sighup=True)

以上是关于当pexpect会话结束时,进程会死亡的主要内容,如果未能解决你的问题,请参考以下文章

java中线程状态-死亡

Qt QProcess startDetached 无法结束进程(bash 会话)

向身份服务器发送结束会话请求会引发错误

newCacheThreadPool()newFixedThreadPool()newScheduledThreadPool()newSingleThreadExecutor()自定义线程池(代码片段

进程死亡时消失的 Python 锁

如何在JAVA中让一个线程死亡或结束