devil实验五Linux进程控制
实验五 守护进程
实验目的
1.掌握守护进程的特点
2.掌握守护进程的程序设计方法。
实验内容
编写一程序,要求运行后成为守护进程,复制守护进程的子进程,子进程往某个文件(如test.txt)里写入字符串“测试守护进程:当前系统时间”。父进程等待子进程终止后向系统日志文件“/var/log/syslog”写入“子进程终止:当前系统时间”结束,守护进程的错误信息输出到系统日志文件。请把产生守护进程的部分分割成独立的程序文件。提示使用openlog函数和syslog,closelog函数。
要求:
守护进程两个源程序文件代码
//daemon.c
#include
#include
#include
#include
#include
#include
#include
#include
void init_daemon(){
int pid;
int i;
FILE *fp;
time_t t;
if(pid=fork())
exit(0);
if((fp=fopen("./test.txt","a"))>=0){
t=time(0);
fprintf(fp,"测试守护进程:%s",asctime(localtime(&t)));
fclose(fp);
}
setsid();
for(i=0;i
close(i);
chdir("/var/log");
umask(0);
return;
}
//main.c
#include
#include
#include
#include
#include
#include
#include
#include
#include
void init_daemon();
void main(){
int status;
time_t t;
init_daemon();
openlog("process message",LOG_PID,LOG_DAEMON);
t=time(0);
wait(&status);
syslog(LOG_INFO,"子进程终止:%s",asctime(localtime(&t)));
closelog();
}
查看子进程文件test.txt和系统日志文件/var/sys/syslog(可用命令tail –f /var/sys/syslog查看)的截图。
实验指导
守护进程(Daemon)是运行在后台的一种特殊进程。
守护进程独立于控制终端并且周期性地执行某种任务或等待处理某些发生的事件。
守护进程是一种很有用的进程。Linux的大多数服务器就是用守护进程实现的。
同时,守护进程完成许多系统任务。
守护进程最重要的特性是后台运行。
其次,守护进程必须与其运行前的环境隔离开来。这些环境包括未关闭的文件描述符,控制终端,会话和进程组,工作目录以及文件创建掩码等。这些环境通常是守护进程从执行它的父进程(特别是shell)中继承下来的。
最后,守护进程的启动方式有其特殊之处。它可以在Linux系统启动时从启动脚本/etc/rc.d中启动,也可以由作业规划进程crond启动,还可以由用户终端(通常是shell)执行。
通过ps –aux命令可查看Linux环境下的守护进程:
Init系统守护进程:它是进程1,负责启动各运行层次特定的系统服务。
Keventd守护进程:为在内核中运行计划执行的函数提供进程上下文。
Kswapd守护进程:也称为页面调出守护进程。它通过将脏页面以低速写到磁盘上从而使这些页面在需要时仍可回收使用,这种方式支持虚存子系统。
bdflush和kupdated守护进程:Linux内核使用两个守护进程bdflush和kupdated将调整缓存中的数据冲洗到磁盘上。当可用内存达到下限时,bdflush守护进程将脏缓冲区从缓冲池中冲洗到磁盘上,每隔一定时间间隔,kupdated守护进程将脏页面冲洗到磁盘上,以便在系统失效时减少丢失的数据。
portmap端口映射守护进程:提供将RPC(远程过程调用)程序号映射为网络端口号的服务。
syslogd守护进程:可由帮助操作人员把系统消息记入日志的任何程序使用。
inetd守护进程(xinetd):它侦听系统网络接口,以便取得来自网络的对各种网络服务进程的请求。
nfsd、lockd、rpcio