当前位置: 移动技术网 > 网络运营>服务器>Linux > 用模板的方式创建守护进程代码实例

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

2017年12月12日  | 移动技术网网络运营  | 我要评论

复制代码 代码如下:

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

如对本文有疑问, 点击进行留言回复!!

相关文章:

验证码:
移动技术网