实验十一

Linux 系统守护进程实验

2017.5.14

【实验目的】

守护进程是 Linux 系统开发中很重要的知识点,本实验要求学员编写一个守护进程,通过本实验,学员可以熟悉守护进程的编写过程。

【实验原理】

守护进程编写的主要步骤如下:

1) 将 程序 进入后台执行。由于守护进程最终脱离控制终端,到后台去运行。方法是在进程中调用 fork 使父进程终止,让 Daemon 在子进程中后台执行。这就是常说的“脱壳”。子进程继续函数 fork()的定义如下: pid_t fork(void);

2) 脱离控制终端、登录会话和进程组。开发人员如果要摆脱它们,不受它们的影响,一般使用 setsid() 设置新会话的领头进程,并与原来的登录会话和进程组脱离。

3) 禁止进程重新打开控制终端。

4) 重设文件权限掩码

5) 关闭打开的文件描述符,并重定向标准输入、标准输出和标准错误输出的文件描述符。进程从创 建它的父进程那里继承了打开的文件描述符。如果不关闭,将会浪费系统资源,引起无法预料的错误。关闭三者的代码如下:

for (fd = 0, fdtablesize = getdtablesize(); fd < fdtablesize; fd++)

close(fd);

5) 改变工作目录到根目录或特定目录进程活动时,其工作目录所在的文件系统不能卸下

【实验内容】

守护进程实例包括两部分:主程序 test.c 和初始化程序 init.c。主程序每隔一分钟向/tmp 目录中的日志 test.log 报告运行状态。初始化程序中的 init_daemon 函数负责生成守护进程。读者可以利用 init_daemon 函 数生成自己的守护进程。

2. test.c

编译: [root@vm root]#gcc –g –o test init.c test.c

执行: [root@vm root]#./test

查看进程: [root@vm root]#ps –ef

从输出可以发现 test 守护进程的各种特性满足上面的要求。


Tags:
Stats:
36 comments
362 views