例8.8 设计两个程序,主程序8-8.c和初始化程序init.c。要求主程序每隔10 s向/tmp目录中的日志8-8.log报告运行状态。初始化程序中的init_daemon函数负责生成守护进程。
程序设计流程图如图8.5所示。
图8.5 例8.8程序设计流程图
编辑源程序代码:
这里的fopen函数必须具有root权限。如果没有root权限,可以看到守护进程的运行,但不会在文件里写入任何字符。
编译、运行文件后,没有任何提示,等待一段时间后,查看8-8.log文件中有没有文字写入,输入“tail -f /tmp/6-8.log”,显示多条文字,从时间上看出守护进程每隔10 s写入一串字符。
用ps命令查看进程,可见8-8一直在运行,而且看到“?”,结合Linux环境下进程的知识,知道确实有了一个守护进程。
注意:父进程创建了子进程而又退出之后,此时该子进程就变成了“孤儿进程”。在Linux中,每当系统发现一个孤儿进程,就会自动由1号进程(也就是init进程)“收养”它,原先的子进程就变成init进程的子进程了。
setsid函数说明如表8.13所示。
表8.13 setsid函数
例8.9 设计两个程序,要求运行后成为守护进程,守护进程又复制出一个子进程,守护进程和它的子进程都调用syslog函数,把结束前的状态写入系统日志文件。
编辑源程序代码:
/*8-9.c程序:守护进程和它的子进程退出,信息写入系统日志文件*/
#include<stdio.h>(www.xing528.com)
#include<stdlib.h>
#include<sys/types.h>
#include <unistd.h>
例8.9程序设计流程图如图8.6所示。
图8.6 例8.9程序设计流程图
注意:调用openlog、syslog函数,操作的系统日志文件“/var/log/message”必须具有root权限。
编译、运行程序后,没有任何提示,等待一段时间后,查看一下/var/log/messages文件中有没有文字写入,输入“tail -f /var/log/messages”,此时显示多条文字,说明守护进程通过系统日志管理服务写入一串字符,而且从时间上看出,第二子进程确实是在暂停5 s后退出的。
用ps命令查看进程,可见8-9一直在运行,而且看到“?”结合Linux环境下进程的知识,知道确实有了一个守护进程。
openlog函数说明如表8.14所示。
表8.14 openlog函数
syslog函数说明如表8.15所示。
表8.15 syslog函数
免责声明:以上内容源自网络,版权归原作者所有,如有侵犯您的原创版权请告知,我们将尽快删除相关内容。