基于Python文档,守护进程线程是主线程死后死亡的线程。这似乎是守护进程的完全相反的行为,它涉及创建子进程和终止父进程,以便init接管子进程(也就是杀死父进程不会杀死子进程)。
那么,为什么守护进程线程在父进程死亡时会死掉,这是一个错误的名称吗?我认为“守护进程”线程将在主进程终止后继续运行。
发布于 2019-07-27 09:50:30
只是名字在不同的背景下意味着不同的东西。
如果您不知道,如threading.Thread,也可以将multiprocessing.Process标记为“守护进程”。您对“守护进程”的描述适合Unix-守护进程,而不是Python的守护进程。
文档中还有一个关于Process.daemon的部分。
..。请注意,不允许守护进程创建子进程。否则,如果守护进程在父进程退出时被终止,则守护进程将使其子进程成为孤儿。此外,这些不是Unix守护进程或服务,它们是正常进程,如果非守护进程已经退出,它们将被终止(而不是加入)。
Python的守护进程和Unix-守护进程(或Windows“服务”)之间唯一的共同点是,您可以将它们用于后台任务(对于Python:对于那些在关机时不需要进行适当清理的任务)。
Python将自己的抽象层强加于OS-线程和进程之上。用于Thread和Process的守护进程属性是关于这个Python级别的抽象的。
在Python级别,守护进程线程是主线程退出时不被加入(等待自愿退出)的线程,守护进程是在父进程退出时终止(而不是加入)的进程。守护进程和进程都有相同的行为,因为在主进程或父进程关闭的情况下,不会等待它们的自然退出。就这样。
请注意,Windows甚至没有像Unix这样的“相关进程”的概念,但是Python以跨平台的方式实现了“子”和“父”的关系。
我认为“守护进程”线程将在主进程终止后继续运行。
线程不能存在于进程之外。进程总是托管至少一个线程并为其提供上下文。
https://stackoverflow.com/questions/57222905
复制相似问题