守护这样的目的是什么?

时间:2011-06-01 07:07:31

标签: c daemon

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);
    }

对我来说似乎毫无意义,因为它只改变了pid,没有别的。

有什么好处?

3 个答案:

答案 0 :(得分:3)

该进程与终端分离,以便当启动它的用户退出其会话时,该进程仍在运行。

守护进程不仅涉及fork,还涉及在子进程中调用setsid(2),将进程与控制终端分离。如果您运行ps,您可以在tty列中看到标有?的流程。

此外,当你启动一个守护进程时,它会在fork之后立即将控件返回给shell,而不是shell必须等待进程终止。

答案 1 :(得分:1)

这样做会破坏父子链接。等待孩子的父母将停止等待,因为孩子将产生守护进程然后退出。

答案 2 :(得分:1)

该流程也成为“流程组负责人”。请参阅此答案,其中包含更多详细信息:

Create a daemon with double-fork in Ruby