守护进程线程与守护进程

时间:2019-07-26 15:17:46

标签: python multithreading process daemon

基于python documentation,守护程序线程是一旦主线程死亡就死亡的线程。这似乎是守护进程完全相反的行为,它涉及创建子进程并终止父进程以使init接管子进程(也就是杀死父进程不会杀死子进程)。

那么,为什么父线程死亡时守护进程线程死亡,这是错误的说法吗?我认为“ daemon”线程将在主进程终止后继续运行。

1 个答案:

答案 0 :(得分:2)

只是名称在不同的上下文中表示不同的事物。

如果您不知道,例如threading.Threadmultiprocessing.Process也可以标记为“守护程序”。您对“守护进程”的描述适合Unix守护进程,而不适合Python的守护进程。

文档中还有关于Process.daemon的部分:

  

...请注意,不允许守护进程创建子进程。   否则,守护进程将使其子进程变成孤儿   当其父进程退出时终止。另外,这些是   不是Unix守护程序或服务,它们是将   如果非守护进程已退出,则终止(并且不加入)。

Python的守护进程和Unix守护进程(或Windows“服务”)之间唯一的共同之处是您将使用将它们用于后台任务 (对于Python:不过,对于关闭时不需要适当清理的任务,这只是一个选择)。

Python在OS线程和-processes之上强加了它自己的抽象层。 ThreadProcess的守护程序属性是关于与操作系统无关,Python级别的抽象的。

在Python级别,守护进程线程是在主线程退出时不被加入(等待自愿退出)的线程,而守护进程是在以下情况被终止(未加入)的线程:父进程退出。守护程序线程和-进程都经历相同的行为,因为如果主进程或父进程正在关闭,则不会等待其自然退出。就是这样。

请注意,Windows甚至没有像Unix那样具有“相关进程”的概念,但是Python以跨平台的方式实现了“子”和“父”的这种关系。

  

我认为“守护程序”线程将在主线程之后继续运行   进程已终止。

线程不能存在于进程的外部。进程始终托管并为至少一个线程提供上下文。