首页 > linux > Daemon,守护进程初始化方法

Daemon,守护进程初始化方法

作者:bin

初始化方法:

void daemonInit()
{
int fd;

// shield some signals
signal(SIGALRM, SIG_IGN);
signal(SIGINT, SIG_IGN);
signal(SIGHUP, SIG_IGN);
signal(SIGQUIT, SIG_IGN);
signal(SIGPIPE, SIG_IGN);
signal(SIGTTOU, SIG_IGN);
signal(SIGTTIN, SIG_IGN);
signal(SIGCHLD, SIG_IGN);

//1、结束父进程,避免父进程进入后台,
//2、调用setsid函数如果是一个进程组的组长,则setsid返回错误
if (fork()) exit(0);

// 1、脱离终端控制
// 2、将进程成为新的会话组长和新的进程组长
if (setsid() == -1) exit(1);

// If you needn’t STDIN,STDOUT,STDERR, close fd from 0;
// 1、关闭父进程打开的描述文件,如不关闭,将会浪费系统资源,并且可能产生不可描述的错误
for (fd = 3;fd < NOFILE; fd++) { close(fd); } chdir(“/”);

//1、进程从创建它的父进程那里继承了文件创建掩模。它可能修改守护进程所创建的文件的存取位。为防止这一点,将文件创建掩模清除
umask(0);
return;
}

流程解析:
(1)在父进程中执行fork并exit推出;

(2)在子进程中调用setsid函数创建新的会话;

(3)在子进程中调用chdir函数,让根目录 ”/” 成为子进程的工作目录;

(4)在子进程中调用umask函数,设置进程的umask为0;

(5)在子进程中关闭任何不需要的文件描述符

您必须 [ 登录 ] 才能发表留言!