我已经尝试了man(3) setsid
,但它只解释了如何使用它,我不明白什么时候setsid有用吗?
会话是共享控制终端的一组进程。当你想要开始一个新的会话,setsid很有用,因为你已经开始连接到一个新的终端 - 比如在终端模拟器中启动一个shell时 - 或者你想要一个守护进程(你不想这样做)与控制终端相关联)。
我知道这些方面的最佳解释是在Unix环境中的R.W. Stevens高级编程中。
Why do we need to group processes?
考虑一下您希望干净地关闭的情况,包括向您的孩子发送信号。存在固有的竞争条件:尚未收到SIGCHLD,因此您知道孩子还活着。所以你发一个信号。但是孩子在信号发送之前终止,而另一个(不相关的)进程启动并获得与发送信号的孩子相同的pid。然后信号进入新的无关过程。这是不好的。因此,不是向特定的pid发送信号,而是向进程组发出信号。当孩子死亡并且新过程以原始pid开始时,新过程不是过程组的一部分,并且避免了上述问题。
要知道它何时有用,您必须将其与其他守护进程的类似命令进行比较:
对于涉及pid和行为的其他并发症,请参阅:
http://go2linux.garron.me/linux/2010/12/setsid-how-execute-commands-after-you-exit-shell-prompt-866/