蒋博1026 发表于 2019-7-30 15:29

Linux-编写简单守护进程

1、任何一个进程都可以将自己实现成一个守护进程2、create_daemon函数要素(1)、子进程要等待父进程退出(2)、子进程使用setsid创建新的会话期,脱离控制台(3)、调用chdir将当前工作目录设置为/(4)、umask设置为0以取消任何文件权限屏蔽(5)、关闭所有文件描述符(6)、将进程0、1、2定位到/dev/null#include <stdio.h>
#include <unistd.h>
#include <stdlib.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>
void creat_daemon(void);
int main(void)
{
    creat_daemon();
    while()
    {
      printf(" i am running\n");
      sleep();
    }
   
    return 0;
}void creat_daemon(void)
{
    pid_t pid =0;
   
    pid = fork();
    if(pid < 0)
    {
      perror("fork");
      exit(-1);
    }
    if(pid > 0)
    {
      exit(0);    //父进程直接退出
    }
    //能够执行到到这里的就是子进程了
   
    //setsid将当前进程设置为一个新的会话期session,
    //目的就是让当前进程脱离控制台
    pid = setsid();
    if(pid < 0)
    {
      perror("setsid");
      exit(-1);
    }
    //将当前进程工作目录设置为根目录
    chdir("/");
    //umask设置为0确保将来进程有最大的文件操作权限
    umask(0);
    //关闭所有文件描述符
    //先要获取当前系统中所允许打开的最大文件描述符数目
    int cnt = sysconf(_SC_OPEN_MAX);
    int i = 0;
    for(i = 0; i < cnt; i++)
    {
      close(i);
    }
    open("/dev/null", O_RDWR);//打开进程0,将其定位到/dev/null
    open("/dev/null", O_RDWR);//打开进程1,将其定位到/dev/null
    open("/dev/null", O_RDWR);//打开进程2,将其定位到/dev/null
}

页: [1]
查看完整版本: Linux-编写简单守护进程