今天完成一個守護進程實驗。
1 熟悉守護進程編寫和調試(系統日志)
2 編寫多進程程序的方法
本實驗首先創建一個守護進程,然後在其中新建一個子進程,暫停10秒,自動退出,守護進程收集子進程退出的消息。源代碼來自華清遠見
#include<stdio.h>
#include<stdlib.h>
#include<unistd.h>
#include<sys/types.h>
#include<sys/wait.h>
#include<syslog.h>
int main(void)
{
pid_t child1, child2;
int i;
child1 = fork();//創建子進程1
if(child1 == 1)
{
perror("child1 fork.\n");
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);//關閉文件描述符
}
child2 = fork();//創建子進程2
if(child2 == 1)
{
perror("child2 fork.\n");
exit(1);
}
else if(child2 == 0)//子進程2中
{
syslog(LOG_INFO, "child2 will sleep for 10s.\n");//向日志中寫入字符串
sleep(10);
syslog(LOG_INFO, "child2 is going to exit!\n");
exit(0);
}
else//父進程(子進程1)
{
waitpid(child2, NULL, 0);//阻塞等待
syslog(LOG_INFO, "child1 noticed that child2 has exited.\n");
closelog();//關閉日志服務
while(1)
{
sleep(10);
}
}
}
注
1 守護進程在後台運行,所以ps -ef|grep daemon_proc查看是否運行。
2 調試信息自動由日志系統保存到/var/log/messages文件中。