gpt4 book ai didi

python - 为什么在 Python 中使用 os.setsid()?

转载 作者:太空宇宙 更新时间:2023-11-04 02:42:58 24 4
gpt4 key购买 nike

我知道 os.setsid() 是将进程( fork )组 ID 更改为自身,但为什么我们需要它?

我可以看到来自 Google 的一些答案是:在父进程退出时保持子进程运行。

但根据我下面的测试,如果没有 os.setsid() ,即使父进程退出(或被杀死),子进程也不会退出。那么为什么我们需要添加 os.setsid() 呢?谢谢。

import os
import time
import sys

mainPid = os.getpid()
print("Main Pid: %s" % mainPid)

pid = os.fork()

if pid > 0:
time.sleep(3)
print("Main process quit")
sys.exit(0)

#os.setsid()

for x in range(1, 10):
print("spid: %s, ppid: %s pgid: %s" % (os.getpid(), os.getppid(), os.getpgid(0)))
time.sleep(1)

最佳答案

调用 setsid 通常是一个进程在成为所谓的守护进程时要经历的步骤之一。 (我们谈论的是 Linux/Unix 操作系统)。

setsid 与控制终端的关联中断。这意味着该过程不会受到注销的影响。

还有其他方法可以在注销后继续存在,但这个“守护进程”的目的是创建一个尽可能独立于外界的后台进程。

这就是为什么所有继承的描述符都是关闭的; cwd 设置为适当的目录,通常是根目录;并且进程离开它开始的 session 。

通常推荐使用双重 fork 方法。在每个 fork 中,父级退出,子级继续。实际上,除了 PID 之外没有任何变化,但这正是这里所需要的。

setsid 之前的第一个fork 确保该进程不是进程组组长。这是成功 setsid 所必需的。

setsid 之后的第二个fork 确保与控制终端的新关联不会仅通过打开终端设备来启动。


注意:当守护进程从 systemd 启动时,systemd 可以安排上述所有内容,因此进程不必这样做。

关于python - 为什么在 Python 中使用 os.setsid()?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45911705/

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