我想创建一个子进程,它将在父进程完成后运行。
我试过:
subprocess.Popen(['myscript'])
exit()
子项已创建,但父项会一直等到子项完成。 相反,我想快速完成,让 child 在后台完成艰苦的工作。有什么建议吗?
一些说明:
- 它在 Linux (Ubuntu Server 14.04) 上运行
- python 2.7 最好
- 我不想以任何方式与 child 交流。 child 是完全独立的过程。
我需要主进程快速完成,因为它将通过网络访问。它旨在触发另一个脚本。结果将稍后发送到电子邮件(由子进程)。因此,用户无需等待答案。只需快速“确定”,然后 child 就会开始。
编辑: 好的。现在老实说,即使是我在这篇文章中的示例也适用于最简单的情况(只有那 2 行 + sleep 10 秒的脚本 + 写入文件 => main 完成,我在 10 秒内得到一个文件)。 实际情况要复杂一些。
有一个脚本,它遍历一系列必须执行的脚本。此主脚本使用 subprocess.Popen 和 communicate() (等待输出)。这称为我在这里寻求帮助的“主要”脚本。这个“主要”做了一些事情然后想在后台运行一个 child 。在这种情况下,“主要”等待 child 。
我将尝试制作一个简短的清理代码示例。
最佳答案
我认为这会起作用:
import os
os.spawnl(os.P_NOWAIT, 'myscript')
如果你只想在 Linux 上运行子进程,这是使用 GNU 程序 nohup
的另一种方法,如下所示:
subprocess.Popen(['nohup '+'myscript'+' &'])
# or use os.system()
关于python - 父进程退出后让子进程继续运行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32833518/