Nginx守护进程的写法简要

本文详细介绍了守护进程的概念,其作为长期后台运行的进程,与控制终端无关联,通常随操作系统启动。文章探讨了守护进程的编写规则,包括使用umask函数、通过fork()创建子进程并确保其成为新的会话领导者,以及如何断开与终端的连接。
摘要由CSDN通过智能技术生成

守护进程是一种长期运行的进程,这种进程在后台运行,不跟任何控制终端关联
一般跟随操作系统启动,生存期长(一般)
守护进程跟黑窗口无关联
./这种命令在后台运行的概念,不会站着终端,
PPID为0,都是内核进程,跟随系统启动,贯穿整个系统

cmd 列[]都是内核守护进程;
init:也是系统守护进程,负责启动各运行层次特定的系统服务,也负责收养孤儿进程
cmd列中,不带[],都是普通守护进程,系统日志,往往自成一组

守护进程编写规则
umask是一个函数,用来屏蔽一些权限
fork()一个子进程,父进程退出,固定套路
fork()目的是成功调用setsid()来建立新会话,不是进程组组长才可以
子进程有单独的sid;而且子进程也成为一个新的进程组组长,不关联任何终端了

主函数中。

int main(){
if(ngx_daemon()!=1)//入口函数
     return 1;//失败
     else
     {
       for(;;)
       {
         sleep(1);
         printf("进程Id 是 %d \n",getpid());//打印了也看不见
       }
     }
}

线程函数。

int ngx_daemon()
{
  int fd;
  switch (fork())//线程创建
  {
  case -1:
  return -1;//失败
  case 0:
  //子线程走到这里,可以直接跳出
    break;
  
  default:
  exit(0);
    //父进程直接退出
  }
  if(setsid()==-1)//创建子进程,失败都是-1
  return -1;
  umask(0);//设置为0,不要设置文件权限
 fd=open("/dev/null",O_RDWR);//打开空设备

 //只有子进程流程才能走到这里
 if(fd==-1)
 return -1;
 if(dup2(fd,STDIN_FILENO)==-1)//文件描述符,把标准输入从屏幕断开
 return -1;//标准错误是2
 if(dup2(fd,STDOUT_FILENO)==-1)//----1
 return -1;
 if(fd>STDERR_FILENO)
 return -1;

 return 1;

}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值