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

本站所有内容来自互联网收集,仅供学习和交流,请勿用于商业用途。如有侵权、不妥之处,请第一时间联系我们删除!Q群:迪思分享

免费资源网 – https://freexyz.cn/

复制代码

代码如下:

#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);

}

免费资源网 – https://freexyz.cn/


© 版权声明
THE END
★喜欢这篇文章吗?喜欢的话,麻烦动动手指支持一下!★
点赞5 分享
评论 抢沙发

请登录后发表评论

    暂无评论内容