【发布时间】:2015-10-07 17:29:08
【问题描述】:
我想知道为什么人们会打电话给fork() 两次,以及为什么第一次打电话是在之前setsid()。
是的,如果调用者已经是进程组负责人,则不会创建新会话。但是,如果我只是不让(祖)父母成为流程组负责人怎么办?谁会为我做(不问我)? (好吧,也许是 1llum1n4t1、Sc13nt0l0gy、美国国家安全局……;)
是的,第一个孩子应该立即退出,而不是创建僵尸进程。但是(祖)父母不能在分叉后退出吗?或者一两个fprintf(stderr,... 或write(2,... 调用(如“成功启动的守护进程xy”)会是一个大问题吗? (我不能用另一种方式来阻止僵尸吗?)
总而言之,这个 double-fork()-"magic" 真的是必需吗(不要惹麻烦)?
还是只是传统或所谓的“最佳实践”(如避免goto)?
或者它只是保证守护进程可以在“历史”(当然我的意思是“在生产环境中使用太旧”)平台上工作,比如 SVr4、BSD 3、RHEL 2 或一些糟糕的 32 位嵌入式平台?
【问题讨论】: