小编典典

创建守护进程时执行双叉的原因是什么?

all

我正在尝试在 python
中创建一个守护进程。我发现了以下问题,其中有一些我目前正在关注的好资源,但我很好奇为什么需要双叉。我在 google
上四处搜寻,发现大量资源声明这是必要的,但不是为什么。

有人提到这是为了防止守护进程获取控制终端。如果没有第二个分叉,它将如何做到这一点?有什么影响?


阅读 96

收藏
2022-07-12

共1个答案

小编典典

查看问题中引用的代码,理由是:

分叉第二个孩子并立即退出以防止僵尸。这会导致第二个子进程成为孤立的,使 init
进程负责其清理。而且,由于第一个孩子是没有控制终端的会话领导者,因此它有可能通过将来打开终端来获得一个(基于 System V
的系统)。第二个分叉保证子进程不再是会话领导者,从而阻止守护进程获取控制终端。

因此,这是为了确保守护进程重新成为 init 的父进程(以防启动守护进程的进程长期存在),并消除守护进程重新获取控制 tty
的任何机会。因此,如果这两种情况都不适用,那么一个分叉就足够了。

2022-07-12