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

  • 相关阅读:
    HDU 6076
    HDU 6069
    ZOJ
    HDU
    斜率优化dp
    UVA 11752 The Super Powers
    poj 3761 bubble sort (排列组合)
    UVA 11174 Stand in a Line
    Caffe初学者第二部:Ubuntu16.04上安装caffe(CPU)+Matlab2014a+Opencv3的详细过程 (亲测成功, 20180529更新)
    Caffe初学者第一部:Ubuntu14.04上安装caffe(CPU)+Python的详细过程 (亲测成功, 20180524更新)
  • 原文地址:https://www.cnblogs.com/edan/p/8886665.html
Copyright © 2011-2022 走看看