Chinaunix首页 | 论坛 | 博客
  • 博客访问: 80357
  • 博文数量: 31
  • 博客积分: 0
  • 博客等级: 民兵
  • 技术积分: 380
  • 用 户 组: 普通用户
  • 注册时间: 2014-02-24 22:04
文章分类

全部博文(31)

文章存档

2014年(31)

我的朋友

分类: C/C++

2014-10-17 10:33:02


main
    |-----......
    |-----socketServer
    |-----tcpsetserveropt
    |-----daemon_init
    |-----......


deamon_init函数代码如下

点击(此处)折叠或打开

  1. void daemon_init(bool bCloseFiles)
  2. {
  3. #ifndef WIN32
  4.     pid_t pid;
  5.     int i;
  6.     
  7.     if((pid=fork()) != 0)//创建子进程
  8.     {
  9.         exit(0);//让父进程退出,让程序在子进程中运行,
  10.     }
  11.     
  12.     setsid();//脱离控制终端,登录会话和进程组,此时进程成为了无终端的会话组长
  13.     
  14.     if((pid=fork()) != 0)//创建孙进程
  15.     {
  16.         exit(0);//让子进程退出,让程序在孙进程中运行,这样的目的是孙进程不再是会话组长,从而禁止进程重新打开控制终端
  17.     }

  18. #ifdef DEBUG_FLAG
  19.     #define MAX_CORE_FILE_SIZE (256 * 1024 * 1024)//设定core文件的最大字节数
  20.     if (set_rlimit(RLIMIT_CORE, MAX_CORE_FILE_SIZE) != 0)
  21.     {
  22.         logWarning("file: "__FILE__", line: %d, " \
  23.             "set max core dump file size to %d MB fail, " \
  24.             "errno: %d, error info: %s", \
  25.             __LINE__, MAX_CORE_FILE_SIZE / (1024 * 1024), \
  26.             errno, STRERROR(errno));
  27.     }
  28. #else
  29.     chdir("/"); //修改工作目录
  30. #endif

  31.     if (bCloseFiles)//关闭文件标识符
  32.     {
  33.         for(i=0; i<=2; i++)
  34.         {
  35.             close(i);
  36.         }
  37.     }
  38. #endif

  39.     return;
  40. }
该函数使进程成为守护进程,这样,该函数执行完毕后,Fdfs_Trackerd进程成为守护进程。
编写守护进程的相关资料可参考文章
http://blog.chinaunix.net/uid-23089249-id-287770.html
http://blog.chinaunix.net/uid-23089249-id-210808.html


阅读(1926) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~