我正在阅读Nginx的开放源代码,我想知道为什么有人杀死父进程并让子进程处理程序的其余部分?为什么不让父进程处理它?非常感激你的帮助。杀死父进程并在fork()之后离开子进程的目的是什么?
我使用Eclipse CDT调试程序,这导致我的调试进入死路,因为它继续调试父进程,而不是子进程(实际上处理程序的其余部分)。
下面是代码片段:
ngx_int_t
ngx_daemon(ngx_log_t *log)
{
int fd;
switch (fork()) {
case -1:
ngx_log_error(NGX_LOG_EMERG, log, ngx_errno, "fork() failed");
return NGX_ERROR;
case 0:
break;
default:
exit(0);
}
/* Do stuff*/
}
编辑:我理解的过程是一个deamonizing程序,但我一直在想,为什么我们应该做的是,在开始?
这是将守护程序与父进程的执行环境断开连接的一种方法。这也是让程序继续在后台运行的一种方式,而用户可以单独继续工作,这在今天的后台作业的shell中并不是非常需要,只留下第一个原因。 –
如果您为每个查询分支,当您更改配置时,您想让分支完成他们的工作,并杀死父级以使用新配置启动一个新配置 –
@Someprogrammerdude,谢谢您的回复。但是,您介意解释为什么我们应该将守护进程从父进程的执行环境中断开?我已经阅读了Linux中的守护进程,但我仍然没有清楚地理解它。非常感谢:) –