main
|-----......
|-----socketServer
|-----tcpsetserveropt
|-----
daemon_init
|-----......
deamon_init函数代码如下
-
void daemon_init(bool bCloseFiles)
-
{
-
#ifndef WIN32
-
pid_t pid;
-
int i;
-
-
if((pid=fork()) != 0)//创建子进程
-
{
-
exit(0);//让父进程退出,让程序在子进程中运行,
-
}
-
-
setsid();//脱离控制终端,登录会话和进程组,此时进程成为了无终端的会话组长
-
-
if((pid=fork()) != 0)//创建孙进程
-
{
-
exit(0);//让子进程退出,让程序在孙进程中运行,这样的目的是孙进程不再是会话组长,从而禁止进程重新打开控制终端
-
}
-
-
#ifdef DEBUG_FLAG
-
#define MAX_CORE_FILE_SIZE (256 * 1024 * 1024)//设定core文件的最大字节数
-
if (set_rlimit(RLIMIT_CORE, MAX_CORE_FILE_SIZE) != 0)
-
{
-
logWarning("file: "__FILE__", line: %d, " \
-
"set max core dump file size to %d MB fail, " \
-
"errno: %d, error info: %s", \
-
__LINE__, MAX_CORE_FILE_SIZE / (1024 * 1024), \
-
errno, STRERROR(errno));
-
}
-
#else
-
chdir("/"); //修改工作目录
-
#endif
-
-
if (bCloseFiles)//关闭文件标识符
-
{
-
for(i=0; i<=2; i++)
-
{
-
close(i);
-
}
-
}
-
#endif
-
-
return;
-
}
该函数使进程成为守护进程,这样,该函数执行完毕后,Fdfs_Trackerd进程成为守护进程。
编写守护进程的相关资料可参考文章
http://blog.chinaunix.net/uid-23089249-id-287770.html
http://blog.chinaunix.net/uid-23089249-id-210808.html
阅读(2294) | 评论(0) | 转发(0) |