首页 理论教育 《Linux系统编程》教你编写守护进程

《Linux系统编程》教你编写守护进程

时间:2023-11-16 理论教育 版权反馈
【摘要】:如果没有root权限,可以看到守护进程的运行,但不会在文件里写入任何字符。编译、运行文件后,没有任何提示,等待一段时间后,查看8-8.log文件中有没有文字写入,输入“tail -f /tmp/6-8.log”,显示多条文字,从时间上看出守护进程每隔10 s写入一串字符。表8.13setsid函数例8.9设计两个程序,要求运行后成为守护进程,守护进程又复制出一个子进程,守护进程和它的子进程都调用syslog函数,把结束前的状态写入系统日志文件。

《Linux系统编程》教你编写守护进程

例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函数

免责声明:以上内容源自网络,版权归原作者所有,如有侵犯您的原创版权请告知,我们将尽快删除相关内容。

我要反馈