【发布时间】:2017-11-02 01:44:39
【问题描述】:
我正在阅读 Nginx 开源,我想知道为什么有人会杀死父进程并让子进程处理程序的其余部分?为什么不让父进程处理呢?非常感谢您的帮助。
我使用 Eclipse CDT 调试程序,这导致我的调试陷入死胡同,因为它继续调试父进程,而不是子进程(实际上处理程序的其余部分)。
这是一个sn-p的代码:
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*/
}
编辑:我知道这个程序是用来解除程序的,但我仍然想知道我们为什么要在一开始就这样做?
【问题讨论】:
-
这是一种将守护进程与父进程的执行环境断开连接的方法。这也是让程序在后台继续运行而用户可以继续单独工作的一种方式,这在当今有后台作业的shell中并不是严格需要的,只留下第一个原因。
-
如果您为每个查询分叉,当您更改配置时,您希望让分叉完成他们的工作并杀死父节点以使用新配置启动一个新配置
-
@Someprogrammerdude,感谢您的回复。但是,您介意解释一下我们为什么要
disconnect the daemon from the execution environment of the parent process吗?我已经阅读了 linux 中的守护进程,但我仍然没有清楚地理解它。非常感谢:) -
@Ôrel 啊,我明白了,现在在 Nginx 上下文中是有意义的。
标签: c linux nginx process fork