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

时间:2015-09-28 23:48:06

标签: python subprocess parent-child daemon

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

我试过了:

subprocess.Popen(['myscript'])
exit()

已创建子项,但父项将等待子项完成。 相反,我想快速完成并让孩子在后台做艰苦的工作。有什么建议吗?

一些澄清:

  • 它在Linux(Ububntu Server 14.04)上运行
  • python 2.7优选
  • 我不想以任何方式与孩子沟通。孩子是完全独立的过程。

我需要主要流程快速完成,因为它将从网络访问。它旨在触发另一个脚本。结果将在稍后(通过子进程)发送到电子邮件。因此,用户无需等待答案。快速“确定”,然后孩子开始。

编辑: 好的。说实话,即使我在这篇文章中的例子也是最简单的例子(只有那两行+脚本,它睡了10秒+写一个文件=>主要完成,我在10秒内得到一个文件)。 实际情况有点复杂。

有一个脚本,它遍历所有必须执行的脚本列表。这个主脚本使用subprocess.Popen和communic()(等待输出)。这称为我的“主要”脚本,我在这里请求帮助。这个“主要”做了一些事情,然后想要在后台经营一个孩子。在这种情况下,“主要”等待孩子。

我将尝试制作一个简短的清理代码示例。

4 个答案:

答案 0 :(得分:1)

我认为这会奏效:

import os  
os.spawnl(os.P_NOWAIT, 'myscript')

如果你只想在Linux上运行子进程,这是另一种使用GNU程序nohup的方式:

subprocess.Popen(['nohup '+'myscript'+' &'])
# or use os.system()

答案 1 :(得分:0)

如果您使用Linux,那么一种方法是使用nohup。请注意,nohup还会将标准输出重定向到nohup.out,这可能是不合需要的

subprocess.Popen(['nohup', 'myscript'])
exit()

答案 2 :(得分:0)

您可以尝试使用system() (documentation)。类似的东西:

import os
os.system('myscript' + ' &')

命令末尾的&将在子shell中的后台执行。

答案 3 :(得分:0)

使用以下代码片段

import subprocess, os
subprocess.Popen(['myscript'])
os._exit(0)