Linux守护进程简单介绍和实例具体解释

时间:2021-09-29 19:46:05

Linux守护进程简单介绍和实例具体解释

简单介绍

守护进程(Daemon)是执行在后台的一种特殊进程.它独立于控制终端而且周期性地执行某种任务或等待处理某些发生的事件.守护进程是一种非常实用的进程.Linux的大多数server就是用守护进程实现的.比方,Internetserverinetd,Webserverhttpd等.同一时候,守护进程完毕很多系统任务.比方,作业规划进程crond,打印进程lpd等.

以下是linux系统中常见的一些守护进程.

amd:自己主动安装NFS(网络文件系统)守侯进程
apmd:高级电源管理 
Arpwatch:记录日志并构建一个在LAN接口上看到的以太网地址和IP地址对数据库 
Autofs:自己主动安装管理进程automount,与NFS相关,依赖于NIS 
Bootparamd:引导參数server,为LAN上的无盘工作站提供引导所需的相关信息 
crond:Linux下的计划任务 
Dhcpd:启动一个DHCP(动态IP地址分配)server 
Gated:网关路由守候进程,使用动态的OSPF路由选择协议 
Httpd:WEBserver 
Inetd:支持多种网络服务的核心守候程序 
Innd:Usenet新闻server 
Linuxconf:同意使用本地WEBserver作为用户接口来配置机器 
Lpd:打印server 
Mars-nwe:mars-nwe文件和用于Novell的打印server 
Mcserv:Midnight命令文件server 
named:DNSserver 
netfs:安装NFS、Samba和NetWare网络文件系统 
network:激活已配置网络接口的脚本程序 
nfs:打开NFS服务 
nscd:nscd(Name Switch Cache daemon)server,用于NIS的一个支持服务,它快速缓存用户口令和组成成员关系 
portmap:RPC portmap管理器,与inetd相似,它管理基于RPC服务的连接 
postgresql:一种SQL数据库server 
routed:路由守候进程,使用动态RIP路由选择协议 
rstatd:一个为LAN上的其他机器收集和提供系统信息的守候程序 
ruserd:远程用户定位服务,这是一个基于RPC的服务,它提供关于当前记录到LAN上一个机器日志中的用户信息 
rwalld:激活rpc.rwall服务进程,这是一项基于RPC的服务,同意用户给每一个注冊到LAN机器上的其他终端写消息 
rwhod:激活rwhod服务进程,它支持LAN的rwho和ruptime服务 
sendmail:邮件serversendmail 
smb:Samba文件共享/打印服务 
snmpd:本地简单网络管理候进程 
squid:激活代理serversquid 
syslog:一个让系统引导时起动syslog和klogd系统日志守候进程的脚本 
xfs:X Window字型server,为本地和远程Xserver提供字型集 
xntpd:网络时间server 
ypbind:为NIS(网络信息系统)客户机激活ypbind服务进程 
yppasswdd:NIS口令server 
ypserv:NIS主server 
gpm:管理鼠标 
identd:AUTH服务,在提供用户信息方面与finger相似

守护进程的编程要点

守护进程的编程本身并不复杂,复杂的是各种版本号的Unix的实现机制不尽同样,造成不同Unix环境下守护进程的编程规则并不一致.以下将介绍Linux下守护进程的编程要点并给出具体实例.

不同Unix环境下守护进程的编程规则并不一致.所幸的是守护进程的编程原则事实上都一样,差别在于具体的实现细节不同.这个原则就是要满足守护进程的特性.编程要点例如以下:

  1. 在后台执行.为避免挂起控制终端将Daemon放入后台执行.方法是在进程中调用fork使父进程终止,让Daemon在子进程中后台执行.
  2. 脱离控制终端,登录会话和进程组.有必要先介绍一下Linux中的进程与控制终端,登录会话和进程组之间的关系:进程属于一个进程组,进程组号(GID)就是进程组长的进程号(PID).登录会话能够包括多个进程组.这些进程组共享一个控制终端.这个控制终端一般是创建进程的登录终端.控制终端,登录会话和进程组一般是从父进程继承下来的.我们的目的就是要摆脱它们,使之不受它们的影响.方法是在第1点的基础上,调用setsid()使进程成为会话组长.(说明:当进程是会话组长时setsid()调用失败.但第一点已经保证进程不是会话组长.)setsid() 调用成功后,进程成为新的会话组长和新的进程组长,并与原来的登录会话和进程组脱离.因为会话过程对控制终端的独占性,进程同一时候与控制终端脱离.
  3. 禁止进程又一次打开控制终端.如今,进程已经成为无终端的会话组长.但它能够又一次申请打开一个控制终端.能够通过使进程不再成为会话组长来禁止进程又一次打开控制终端.
  4. 关闭打开的文件描写叙述符.进程从创建它的父进程那里继承了打开的文件描写叙述符.如不关闭,将会浪费系统资源,造成进程所在的文件系统无法卸下以及引起无法预料的错误.
  5. 改变当前工作文件夹.进程活动时,其工作文件夹所在的文件系统不能卸下.一般须要将工作文件夹改变到根文件夹.对于须要转储核心,写执行日志的进程将工作文件夹改变到特定文件夹如/tmpchdir(“/”).
  6. 重设文件创建掩模.进程从创建它的父进程那里继承了文件创建掩模.它可能改动守护进程所创建的文件的存取位.为防止这一点,将文件创建掩模清除:umask(0).
  7. 处理SIGCHLD信号.处理SIGCHLD信号并非必须的.但对于某些进程,特别是server进程往往在请求到来时生成子进程处理请求.假设父进程不等待子进程结束,子进程将成为僵尸进程(zombie)从而占用系统资源.假设父进程等待子进程结束,将添加父进程的负担,影响server进程的并发性能.在Linux下能够简单地将SIGCHLD信号的操作设为SIG_IGN.这样,内核在子进程结束时不会产生僵尸进程.
aaarticlea/png;base64,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" alt="" />

守护进程实例

守护进程实例包括两部分:主程序test.c和初始化程序init.c.主程序每隔一分钟向/tmp文件夹中的日志test.log报告执行状态.初始化程序中的init_daemon函数负责生成守护进程.读者能够利用init_daemon函数生成自己的守护进程.
1.init.c清单
#include < unistd.h >
#include < signal.h >
#include < sys/param.h >
#include < sys/types.h >
#include < sys/stat.h >
void init_daemon(void)
{
int pid;
int i;
if(pid=fork())
exit(0);//是父进程,结束父进程
else if(pid< 0)
exit(1);//fork失败,退出 //是第一子进程,后台继续执行
setsid();//第一子进程成为新的会话组长和进程组长,并与控制终端分离
if(pid=fork())
exit(0);//是第一子进程,结束第一子进程
else if(pid< 0)
exit(1);//fork失败,退出 //是第二子进程,继续,第二子进程不再是会话组长
for(i=0;i< NOFILE;++i)//关闭打开的文件描写叙述符
close(i); chdir(“/tmp”);//改变工作文件夹到/tmp umask(0);//重设文件创建掩模
return;
}

2.test.c清单

#include < stdio.h >
#include < time.h >
extern void init_daemon(void);//守护进程初始化函数
main()
{
FILE *fp;
time_t t;
init_daemon();//初始化为Daemon
while(1)//每隔一分钟向test.log报告执行状态
{
sleep(60);//睡眠一分钟
if((fp=fopen(“test.log”,”a”)) >=0)
{
t=time(0);
fprintf(fp,”I’m here at %s\n”,asctime(localtime(&t)) );
fclose(fp);
}
}
}