gpt4 book ai didi

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

转载 作者:IT老高 更新时间:2023-10-28 12:24:21 25 4
gpt4 key购买 nike

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

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

最佳答案

我试图理解双叉并在这里偶然发现了这个问题。经过大量研究,这是我想出来的。希望它能帮助有相同问题的人更好地澄清问题。

在 Unix 中,每个进程都属于一个组,该组又属于一个 session 。这是层次结构……

session (SID)→进程组(PGID)→进程(PID)

进程组中的第一个进程成为进程组组长, session 中的第一个进程成为 session 组长。每个 session 都可以有一个与之关联的 TTY。只有 session 负责人可以控制 TTY。对于真正被守护的进程(在后台运行),我们应该确保 session 领导者被杀死,这样 session 就不可能控制 TTY。

我从 this site 运行 Sander Marechal 的 Python 示例守护程序在我的 Ubuntu 上。这是我的评论的结果。

1. `Parent`    = PID: 28084, PGID: 28084, SID: 28046
2. `Fork#1` = PID: 28085, PGID: 28084, SID: 28046
3. `Decouple#1`= PID: 28085, PGID: 28085, SID: 28085
4. `Fork#2` = PID: 28086, PGID: 28085, SID: 28085

注意,进程是Decouple#1之后的 session 领导者,因为它是PID = SID。它仍然可以控制 TTY。

请注意,Fork#2 不再是 session 负责人 PID != SID。此过程永远无法控制 TTY。 真正的守护进程。

我个人觉得术语 fork-twice 令人困惑。更好的习惯用法可能是 fork-decouple-fork。

其他感兴趣的链接:

关于unix - 创建守护进程时执行双叉的原因是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/881388/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com