- 论坛徽章:
- 0
|
所谓守护进程即为(这是个人理解哈)脱离父进程,脱离shell控制的,寄存于系统进程(init进程)的一种进程(从专业的文档上摘录下来的为这个说的:守护进程是生存期长的一种进程。它们独立于控制终端并且周期性的执行某种任务或等待处理某些发生的事件。他们常常在系统引
导装入时启动,在系统关闭时终止。unix系统有很多守护进程,大多数服务器都是用守护进程实现的。比如,网络服务inetd、Web服务http等。同
时,守护进程完成许多系统任务。比如,作业规划进程crond、打印进程lqd等)
大致步骤为:
1.fork()一个子进程,并关闭父进程,摆脱shell控制
2.setsid()将当前子进程设置为会话组长
3.chdir()改变当前工作目录,一般是建议将其设置为根目录chdir("/");
4.close()关闭打开的文件描述符(这点是因为子进程从父进程那边继承了很多代码段,当然包括一些打开的文件描述符,如果不关闭的话就会导致很多资源的浪费,而且也不希望守护进程将一些信息打印到终端上
5.umask(0)重设掩码
一个简单的守护进程程序(不写头文件了哈)
int main(int args,char **argv)
{
int pid,i;
pid=fork();
if(pid0)
{
printf("fork error!");
exit(1);
}else if(pid>0)
{
exit(0);//退出父进程
}
setsid();
chdir("/");
umask(0);
for(i=0;iNOFILE;i++)
{
close(i);
}
return 0;
}
本文来自ChinaUnix博客,如果查看原文请点:http://blog.chinaunix.net/u3/103340/showart_2047597.html |
|