#include <stdio.h>
#include <stdlib.h>
#include <sys/types.h>
#include <unistd.h>
#include <sys/wait.h>
#include <syslog.h>
int main(void)
{
pid_t child1,child2;
int i;
child1=fork();
if(child1==1)//pid=1的进程是init进程
{
perror("child1 fork");//perror是错误输出函数,若无错误就输出:child1 fork:error0
exit(1);
}
else if(child1>0)
{
exit(0);//父进程退出
}
openlog("daemon_proc_info",LOG_PID,LOG_DAEMON);//打开系统日志服务
setsid(); //设置新的会话组
chdir("/");//更改当前目录为根目录
umask(0);//修改文件权限掩码
for(i=0;i<getdtablesize();i++)//它返回所在进程的文件描述附表的项数,即该进程打开的文件数目
{
close(i);
}
//子进程1成为守护进程
child2=fork();//子进程1的子进程2
if(child2==1)
{
perror("child2 fork");
exit(1);
}
else if(child2==0)
{
syslog(LOG_INFO,"child2 will sleep for 10s");//在日志中写入字符串
sleep(10);
syslog(LOG_INFO,"child2 is going to exit!");
exit(0);
}
else
{
waitpid(child2,NULL,0);//将子进程2阻塞,子进程1收集子线程2的退出消息
syslog(LOG_INFO,"child1 noticed that child2 has exited");
closelog();//关闭日志服务
while(1)
{
sleep(10);
}
}
}