用模板的方式创建守护进程代码实例_linuxshell教程-查字典教程网
用模板的方式创建守护进程代码实例
用模板的方式创建守护进程代码实例
发布时间:2016-12-28 来源:查字典编辑
摘要:复制代码代码如下:#include"wrap.h"#defineMYDOMAIN_FLAG"/tmp/.mydomain_log"voidd...

复制代码 代码如下:

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

intfd,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);

}

相关阅读
推荐文章
猜你喜欢
附近的人在看
推荐阅读
拓展阅读
  • 大家都在看
  • 小编推荐
  • 猜你喜欢
  • 最新linuxshell学习
    热门linuxshell学习
    脚本专栏子分类