2.Nginx切换为守护进程

本文介绍了如何将Nginx配置为守护进程,主要涉及ngx_daemon函数的使用,以及守护进程转换的一般步骤,包括fork创建子进程、setsid创建新会话、umask设置文件权限、dup2重定向标准输入输出以及关闭多余文件描述符。
摘要由CSDN通过智能技术生成

Nginx配置为以守护进程的方式运行时,在主函数里面会通过调用ngx_daemon来使自己切换为守护进程,具体配置项为"daemon on/off".

如果阅读过其他的服务端代码例如memcached,会发现这些程序切换为守护进程的方式基本是一致的,大致遵循如下几个步骤:

1.调用fork来创建一个子进程,并使父进程终止,然后子进程自动转化为守护进程

2.调用setsid来创建新会话,并使子进程成为会话组长,以此来脱离控制终端

3.调用umask来设置创建新文件的权限掩码

4.调用dup2重定向stdin、stdout和stderr到/dev/null(黑洞)

5.关闭stdin、stdout和stderr以外的文件描述符


以下代码摘自Nginx 0.1.0版本:

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

    ngx_pid = ngx_getpid();

    if (setsid() == -1) {
        ngx_log_error(NGX_LOG_EMERG, log, ngx_errno, "setsid() failed");
        return NGX_ERROR;
    }

    umask(0);

 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值