当前位置 博文首页 > 用模板的方式创建守护进程代码实例

    用模板的方式创建守护进程代码实例

    作者:admin 时间:2021-02-15 12:03

    复制代码 代码如下:

    #include "wrap.h"
    #define MYDOMAIN_FLAG "/tmp/.mydomain_log"

    void domain_end(){
     Unlink(MYDOMAIN_FLAG);
    }

    int domain_init(){
     int fd;
     fd=open(MYDOMAIN_FLAG,O_RDWR|O_CREAT|O_EXCL|O_APPEND,0600);
     if(fd==-1)
      err_sys(errno,"domain faild, %s",MYDOMAIN_FLAG);
     Dup2(fd,1);
     Dup2(fd,2);
     return fd;
    }
    /*
    功能:
     work函数为我们的工作函数,他的返回值,会被init()系统进程收集作为守护的退出码
    参数:
     argc,argv均为入口函数main()的参数副本。
    */
    int work(int argc,char **argv){
     while(1){
      sleep(60);
      err_msg("one loop....");
     }
     return 0;
    }
    int start_domain(int argc,char **argv,int (*work)(int argc,char **argv)){
     pid_t pid;
     int  fd,ecode;
     fd=domain_init();
     if(Fork()==0){
      if(Fork()==0){
       Atexit(domain_end);
       err_msg("domain has ran sucessfully....");
       /*如果work()的返回时间比其父进程调用exit(0)的时间早,将不会被init()进程领养。以后我们会用管道的特点来同步父子进程。*/
       ecode=work(argc,argv);
       exit(ecode);
      }
      exit(0);
     }
     Wait(NULL);
     return 0;
    }
    int main(int argc,char **argv){
     return start_domain(argc,argv,work);
    }

    js