daemon进程的简介

一个进程变为daemon进程后,能获得一个与父进程无瓜葛的环境(工作目录、文件描述符、信号处理...)。

 

所以daemon的功能我们可以自己简单实现(linux系统也提供了一个daemon函数):

 

signal(SIGALRM, SIG_IGN);
signal(SIGINT,  SIG_IGN);

...

 

if (fork()) {

    exit(0);

}

setsid创建新会话

 

关闭不需要的文件句柄

 

修改工作目录和文件掩码

    chdir("/");
    umask(0);

 

========== 下面是网上搜到的

a. fork()之后父进程退出。子进程确保不是process group leader,这是成功调用

   setsid()所要求的。

 

b. setsid(),创建新的sessionprocess group,成为其leader,并脱离控制终端。

 

c. 再次fork()之后父进程退出,子进程确保不是session leader,将永远不会重获

   控制终端。这是SVR4的特性所致。

 

d. chdir( "/" ),减少管理员卸载(unmount)文件系统时可能遇上的麻烦。这一步可

   选,也可chdir()到其它目录。

 

e. umask( 0 ),使当前进程对自己所写文件拥有完全控制权,避免继承的umask()

   置带来困挠。这一步可选。

 

f. 关闭012三个句柄。许多daemon程序用sysconf()获取_SC_OPEN_MAX,并在一

   个偱环中关闭所有可能打开的文件句柄。目的在于释放不必要的系统资源,它们

   是有限资源。

 

g. 出于安全以及健壮性考虑,即使当前进程不使用stdinstdoutstderr,也应重

   新打开012三个句柄,使之对应/dev/null。当然,你也可以根据需要使之对

   应不同的()文件。总之,保持012三个句柄呈打开状态,并使之指向无害文

   件。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值