发布网友 发布时间:2022-04-24 10:43
共2个回答
热心网友 时间:2023-10-10 11:11
是的,这个时候它还可以申请打开一个控制终端,而申请一个控制终端只能是一个进程组组长,那么可以让它fork后自己再退出,子进程做剩下的事。所以执行过你所说的这些步骤后,下一步还应该调用一次fork(),父进程退出,子进程关闭继承于父进程打开的文件,修改自己的工作目录,然后正式成为一个daemon进程。
热心网友 时间:2023-10-10 11:11
当进程是组长时setsid()调用失败。所以你先fork(),子进程继承了父进程的进程组ID,并且保证不是进程组长,相当于为成功调用setsid()做了一次保证。当然书上说这是第2个原因,第1个原因是“如果该守护进程是作为一条简单shell命令启动的,那么父进程终止使得shell认为这条命令已经执行完毕;"