当前位置: 首页 > 面试题库 >

当父进程退出时,如何让子进程存活?

司马彦
2023-03-14
问题内容

我想使用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。