欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

用模板的方式創(chuàng)建守護(hù)進(jìn)程代碼實(shí)例

 更新時(shí)間:2013年12月19日 15:17:25   作者:  
用模板的方式創(chuàng)建守護(hù)進(jìn)程,只需要定義一個(gè)與int work(int argc,char **argv)相同的偽入口函數(shù)傳入start_domain()函數(shù)即可

復(fù)制代碼 代碼如下:

#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函數(shù)為我們的工作函數(shù),他的返回值,會(huì)被init()系統(tǒng)進(jìn)程收集作為守護(hù)的退出碼
參數(shù):
 argc,argv均為入口函數(shù)main()的參數(shù)副本。
*/
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()的返回時(shí)間比其父進(jìn)程調(diào)用exit(0)的時(shí)間早,將不會(huì)被init()進(jìn)程領(lǐng)養(yǎng)。以后我們會(huì)用管道的特點(diǎn)來(lái)同步父子進(jìn)程。*/
   ecode=work(argc,argv);
   exit(ecode);
  }
  exit(0);
 }
 Wait(NULL);
 return 0;
}
int main(int argc,char **argv){
 return start_domain(argc,argv,work);
}

相關(guān)文章

最新評(píng)論