Linux守护进程的创建(结合nginx框架)

本文介绍了如何在Linux环境下使用C++创建守护进程,重点讲解了ngx_doemon函数,涉及fork、setsid、umask和dup2等关键系统调用。通过将标准输入、输出和错误重定向到/dev/null,确保进程在后台稳定运行。示例代码展示了如何在主程序中调用ngx_doemon实现守护进程,并进行无限循环的工作。
摘要由CSDN通过智能技术生成

Linux守护进程的创建(结合nginx框架)

先介绍几个相关函数:

int dup2(arg1,arg2):参数一指向的内容赋给参数二,shi的参数二也能访问参数一所指向的内容,并返回新的描述符

int fork()创建子进程,返回值-1:创建失败 返回值0:子进程 返回其他:父进程

setsid()调用成功后,返回新的会话的ID,调用setsid函数的进程成为新的会话的领头进程,并与其父进程的会话组和进程组脱离

unmask():umask可用来设定[权限掩码]。[权限掩码]是由3个八进制的数字所组成,将现有的存取权限减掉权限掩码后,即可产生建立文件时预设的权限,咱们现在不用管,设置成0就可以了

代码:

#include <fcntl.h>
#include <iostream>
#include <signal.h>
#include <stdlib.h>
#include <sys/stat.h>
#include <unistd.h>
using std::cout;
using std::endl;
int ngx_doemon
{
    int fd;

    switch (fork())
    {
    case -1:
        return -1;
    case 0:
        break;
    default:
        exit(0);
    }

    if (setsid() == -1)
    {
        return -1;
    }

    umask(0);
    fd = open("dev/null", O_RDWR);
    if (fd == -1)
    {
        return -1;
    }
    if (dup2(fd, STDIN_FILENO) == -1)
    {
        return -1;
    }
    if (dup2(df, STDOUT_FILENO))
    {
        return -1;
    }
    if (fd > STDERR_FILENO)
    {
        if (close(fd) == -1)
            return -1;
    }
    return 1;
}
int main(int argc, char const *argv[])
{
    if (ngx_doemon != 1)
    {
        //创建守护进程失败,可以做失败后的处理
        return -1;
    }
    else
    {
        //创建守护进程成功,执行守护进程中要做的工作
        for (;;)
        {
            sleep(1);
        }
    }

    return 0;
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值