zoukankan      html  css  js  c++  java
  • 守护进程(精灵进程)

    步骤:
       1.设置创建文件屏蔽字     <控制新建文件权限>
       2.fork产生孤儿进程       <保证不会是组长进程 确保setsid成功调用>
       3.调用setsid脱离控制终端 <脱离控制终端>//建立一个新会话
       4.更改工作路径到'/'      <防止意外的占用挂载路径 导致无法正常卸载>
       5.关闭不用的文件描述符  并将 stdin stdout stderr 重定向到/dev/null

    注:只有第三项是必须的,其他的可以根据用户实际需求写


    产生守护进程的函数:
       int daemon(int nochdir, int noclose);

    代码如下:

    #include <stdio.h>
    #include <stdlib.h>
    #include <unistd.h>
    #include <sys/types.h>
    #include <sys/stat.h>
    #include <fcntl.h>

    #include <time.h>
    #include <string.h>

    int caretDeamon(void);

    int main(void)
    {
        int ret;

        ret=caretDeamon();
        if(ret!=0)   return 1;

        int fin;
        fin=open("/tmp/date.txt",O_RDWR|O_TRUNC|O_CREAT,0644);
        //做事情
        time_t  t;
        struct  tm  *tt;
        char    *date;
        while(1)
        {
          t=time(NULL);
          tt=localtime(&t);
          date=asctime(tt);
          write(fin,date,strlen(date));

          sleep(10);
        }
        return 0;
    }
    int caretDeamon(void)
    {
        pid_t pid;
        //产生孤儿进程 避免其为组长进程
        pid=fork();
        if(pid==-1)     return -1;
        else if(pid>0)  exit(0);//
        //child process
        umask(0077);//非必须选项
        
        //printf("pid:%d gid:%d sid:%d ",getpid(),getpgrp(),getsid(getpid()));
        if(setsid()==-1)//脱离控制终端进入后台
        {
            perror("setsid");
            return -2;
        }
        //printf("pid:%d gid:%d sid:%d ",getpid(),getpgrp(),getsid(getpid()));

        //如果无需和用户通过stdin stdout交互 则重定向
        int fd;
        fd=open("/dev/null",O_RDWR);
        if(fd==-1)  return -3;
        dup2(fd,STDIN_FILENO);
        dup2(fd,STDOUT_FILENO);
        dup2(fd,STDERR_FILENO);

        return 0;
    }

  • 相关阅读:
    .net core app的几个依赖究竟是什么
    ocelot identityserver4 consul整合漫谈
    错位重排算法公式的理解
    IIS证书配置。。这究竟是为什么
    .net core修改IIS发布的环境变量
    服务注册和发现组件-consul
    记一次失败的ubuntu虚拟机配置过程。。。
    .net core统一认证学习笔记(一)ocelot分析
    第四天
    第三天
  • 原文地址:https://www.cnblogs.com/edan/p/8886665.html
Copyright © 2011-2022 走看看