Linux守护进程介绍及实例详解

发表于:2013-1-23 09:54

字体: | 上一篇 | 下一篇 | 我要投稿

 作者:mylinux    来源:51Testing软件测试网采编

分享:

  三、守护进程实例

  守护进程实例包括两部分:主程序test.c和初始化程序init.c。主程序每隔一分钟向/tmp目录中的日志test.log报告运行状态。初始化程序中的init_daemon函数负责生成守护进程。读者可以利用init_daemon函数生成自己的守护进程。

  1、init.c清单

  1. #include < unistd.h > 
  2. #include < signal.h > 
  3. #include < sys/param.h > 
  4. #include < sys/types.h > 
  5. #include < sys/stat.h > void init_daemon(void)  
  6. {  
  7. int pid;  
  8. int i;  
  9. if(pid=fork())  
  10. exit(0);//是父进程,结束父进程  
  11. else if(pid< 0)  
  12. exit(1);//fork失败,退出  
  13. //是第一子进程,后台继续执行  
  14. setsid();  
  15. //第一子进程成为新的会话组长和进程组长  
  16. //并与控制终端分离  
  17. if(pid=fork())  
  18. exit(0);  
  19. //是第一子进程,结束第一子进程  
  20. else if(pid< 0)  
  21. exit(1);  
  22. //fork失败,退出  
  23. //是第二子进程,继续  
  24. //第二子进程不再是会话组长  
  25. for(i=0;i< NOFILE;++i)//关闭打开的文件描述符  
  26. close(i);   chdir(“/tmp”);  
  27. //改变工作目录到/tmp  
  28. umask(0);  
  29. //重设文件创建掩模  
  30. return;  
  31. }

  2、test.c清单

  1. #include < stdio.h > 
  2. #include < time.h >   
  3. void init_daemon(void);//守护进程初始化函数   
  4. main()   
  5. {    
  6. FILE *fp;     
  7. time_t t;     
  8. init_daemon();//初始化为Daemon     
  9. while(1)//每隔一分钟向test.log报告运行状态     
  10.  {       
  11. sleep(60);//睡眠一分钟       
  12. if((fp=fopen(“test.log”,”a”)) >=0)       
  13.    {         
  14. t=time(0);         
  15. fprintf(fp,”I’m here at %s\n”,asctime(localtime(&t)) );        
  16. fclose(fp);       
  17.     }    
  18.   }  
  19. }

  以上程序在RedHat Linux6.0下编译通过。步骤如下:

  编译:

$ gcc –g –o test init.c test.c
执行:./test
查看进程:ps –ef

  从输出可以发现test守护进程的各种特性满足上面的要求。

33/3<123
价值129的会员专享直播免费赠送,添加微信领取听课名额哦~

关注51Testing

联系我们

快捷面板 站点地图 联系我们 广告服务 关于我们 站长统计

法律顾问:上海漕溪律师事务所 项棋律师
版权所有 上海博为峰软件技术股份有限公司 Copyright©51testing.com 2003-2023
投诉及意见反馈:webmaster@51testing.com; 业务联系:service@51testing.com 021-64471599-8017

沪ICP备05003035号

沪公网安备 31010102002173号