守护进程时进行双分叉的原因是为了防止守护进程获取控制tty(What is the reason for performing a double fork when creating a daemon?)
获取控制权的程序有哪些例子,为什么需要这样做?
我的问题是由这个问题引起的:How to monitor child process output and exit status without adversely affecting child?
答案 0 :(得分:2)
故意获取控制tty的程序示例是getty
(处理设置“真实”tty行的程序,如控制台,RS-232串行线和调制解调器以供使用作为登录终端)和sshd
(分叉并获得一个伪造终端)。
然而,在双分叉的原因的背景下,强调意外(无意)获得控制权的程序更为重要,因为这主要是双叉防守的,根据你的回答引用。因此,无意中获取控制tty的程序的示例是:
setsid()
,因此是会话领导者; O_NOCTTY
换句话说:由于程序通常不会在每次打开时使用O_NOCTTY
,并且通常不打算在打开时获取控制终端,因此使用双叉方法来防止它是非常有用的。收购发生。