我想使用multiprocessing
模块来完成此操作。
当我这样做时,例如:
$ python my_process.py
我启动一个父进程,然后让父进程产生一个子进程,
然后我希望父进程退出自身,但子进程继续工作。
请允许我写一个 错误 代码来解释一下自己:
from multiprocessing import Process
def f(x):
with open('out.dat', 'w') as f:
f.write(x)
if __name__ == '__main__':
p = Process(target=f, args=('bbb',))
p.daemon = True # This is key, set the daemon, then parent exits itself
p.start()
#p.join() # This is WRONG code, just want to exlain what I mean.
# the child processes will be killed, when father exit
那么,我如何启动一个在父进程完成时不会被杀死的进程?
20140714
大家好
我的朋友刚刚告诉我一个解决方案…
我只是想…
无论如何,只要让您看到:
import os
os.system('python your_app.py&') # SEE!? the & !!
这确实有效!!
一个技巧:调用os._exit
以退出父进程,这样守护进程就不会被杀死。
但是还有其他一些副作用,如doc中所述:
Exit the process with status n, without calling cleanup handlers,
flushing stdio buffers, etc.
如果您对此不关心,则可以使用它。
问题内容: 我正在使用ProcessBuilder启动子进程,并且如果父进程确实需要退出子进程。在正常情况下,我的代码可以正确阻止孩子。但是,如果我导致操作系统杀死父进程,则子进程将继续运行。 有什么方法可以将子进程“绑定”到父进程,以便在父进程被杀死时退出? 问题答案: 子进程与其父进程之间没有联系。他们可能彼此知道进程ID,但是它们之间没有硬连接。您在谈论孤立过程。这是操作系统级别的问题。意味
问题内容: 假设我有一个进程,它恰好产生了一个子进程。现在,当父进程出于某种原因(正常或异常,通过kill,^ C,断言失败或其他任何原因)退出时,我希望子进程死亡。如何正确地做到这一点? 问题答案: 子进程可以通过在syscall中指定选项来要求父进程去世时内核发出(或其他信号),如下所示: 有关详细信息,请参见。 编辑:这是仅Linux
我正在创建一个TCP服务,该服务在每次客户端连接时分叉一个新进程。在分叉之前,我设置了一个管道,以便子级可以将连接期间收集的统计信息发送回父级。父项关闭写入端,子项关闭读取端,父项维护读取端文件描述符数组,每个子项一个。 我不确定当孩子完成连接并退出时如何处理这些文件描述符。子级是否需要通过管道通知父级即将退出,以便父级可以关闭管道?或者,父级能否在子级退出并关闭后自动检测到管路损坏? 父程序中的
问题内容: 对于子进程,和函数可用于暂停当前进程的执行,直到子进程退出。但是此功能不能用于非子进程。 是否有另一个函数可以等待任何进程的退出? 问题答案: 什么都不等于。通常的做法是使用轮询,寻找返回值-1和的,表明进程已经一去不复返了。
问题内容: 是否可以从Shell脚本中的父进程ID获取子进程ID? 我有一个要使用Shell脚本执行的文件,这会导致一个新进程 process1 (父进程)。这个 过程1 已经分叉的另一个进程 过程2 (子进程)。使用脚本,我可以使用以下命令获取 process1 的pid : 但我无法获取子进程的pid。 问题答案: 只需使用:
是否可以从外壳脚本中的父进程ID获取子进程ID? 我有一个要使用shell脚本执行的文件,这会导致一个新的进程process1(父进程)。此进程1已经派生了另一个进程process2(子进程)。使用脚本,我可以使用以下命令获得进程1的pid: 但是我无法获取子进程的pid。