python - 父进程退出后让子进程继续运行

标签 python subprocess parent-child daemon

我想创建一个子进程,它将在父进程完成后运行。

我试过:

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/

相关文章:

python - 从 crontab 运行的脚本留下一个空文件

python - python中如何将Json对象转换为树类型?

python-2.7 - 来自 AWS Lambda 函数的独立 python 子进程

python - 何时对 Python 子进程模块使用 Shell=True

python的subprocess.Popen跳过输入

elasticsearch - ElasticSearch-亲子关系是最好的方法吗?

python - 如何修复尝试安装 Tensorflow 导致的异常?

python /Django : RelatedObjectDoesNotExist: Cart has no user

javascript - 在JavaScript中,当 `ancestors()`返回一个Promise时,如何实现一个递归的 `parent()`函数

javascript - 选择根复选框时选择多个子项和子项