上一篇博客讲了,fork的作用,那么为什么有时候有些代码会调用两次fork呢?
(1)调用一次fork的作用:
第一次fork的作用是让shell认为这条命令已经终止,不用挂在终端输入上,还有就是为了后面的setsid服务,因为调用setsid函数的进程不能是进程组组长,如果不fork出子进程,则此时的父进程是进程组组长,就无法调用setsid。当子进程调用完setsid函数之后,子进程是会话组长也是进程组组长,并且脱离了控制终端,此时,不管控制终端如何操作,新的进程都不会收到一些信号使得进程退出。
(2)第二次fork的作用:
虽然当前关闭了和终端的联系,但是后期可能会误操作打开了终端。
只有会话首进程能打开终端设备,也就是再fork一次,再把父进程退出,再次fork的子进程作为守护进程继续运行,保证了该精灵进程不是对话期的首进程,
第二次不是必须的,是可选的。
本文解析了在创建守护进程时为何有时需要调用两次fork。首次fork让进程脱离终端并为setsid函数做准备;二次fork则确保守护进程不成为会话首进程,避免未来可能的终端重新连接。
1701

被折叠的 条评论
为什么被折叠?



