《UNIX高级环境编程》第十三章 守护进程(一文读懂UNIX下守护进程)
一、守护进程的特征守护进程是一种生命周期较长的进程常常在系统启动时被运行在系统关闭时终止并且没有关联的终端设备是一个后台进程。一个系统中父进程ID为0的一般是内核进程。进程1通常是init进程是一个系统守护进程。在Linux下keventd守护进程为在内核中运行计划执行的函数提供进程上下文。kapmd守护进程为许多计算机的高级电源管理提供支持。kswapd守护进程也成为页面调出守护进程通过将藏页面以低速写道磁盘上从而使这些页面在需要时仍可回收使用。Linux内核使用两个守护进程bdflush和kupdated将高速缓存中的数据冲洗到磁盘上当可用内存达到下限时bdflush守护进程将脏缓冲区从缓冲池中冲洗到磁盘上。每隔一定时间间隔kupdated守护进程将藏页面冲洗到磁盘上以便系统失效时减少丢失的数据。inetd守护进程侦听系统网络接口以便获取来自网络的对各种网络服务的请求。cron守护进程在指定的日期和时间执行指定命令。大多数守护进程都以超级用户特权运行大多数守护进程的父进程是init进程。二、编写守护进程的规则1.调用umask将文件模式创建屏蔽字设置为0.2.调用fork然后使父进程退出。这样子进程继承了父进程的进程组ID但不继承父进程ID这保证了新的进程不是一个进程组的组长进程。3.调用satsid创建一个会话此进程会称为会话首进程成为一个新进程组的组长进程并且不具有控制终端。4.将当前工作目录更改为根目录。从父进程继承过来的工作目录可能在一个装配文件系统中而守护进程会在系统关闭前一直运行则守护进程工作的此目录存在的装配文件系统就始终不可被拆卸这与装配文件系统的原意不符。5.关闭不再需要的文件描述符。这使守护进程不再持有从父进程继承来的文件描述符。6.某些守护进程打开/dev/null使其具有文件描述符012这样任何一个试图读标准输入写标准输出或标准出错的历程都不会产生任何效果因为守护进程不与用户进行互动。一个初始化守护进程的程序调用void Initprocess(const char *cmd) { int fd0,fd1,fd2; pid_t pid; struct rlimit r1; struct sigaction sa; umask(0);//文件模式创建屏蔽字设为0 if(getrlimit(RLIMIT_NOFILE,r1) 0)//获得最大文件描述符 err_quit(cant get file limit); if(pid fork()0) err_quit(fork fail); else if(pid 0) exit(0);//父进程终止 setsid();//子进程创建会话 sa.sa_handler SIG_IGN; sigemptyset(sa.sa_mask); sa.sa_flags 0; if(sigaction(SIGHUP,sa,NULL) 0)//忽略SIGHUP信号防止与进程关联的终端关闭时进程异常退出 err_quit(set fail); if((pid fork()) 0) err_quit(fork fail); else if(pid ! 0) exit(0); if(chdir(/) 0) //改变工作目录到根目录 err_quit(change directory fail); if(r1.rlim_max RLIM_INFINITY) r1.rlim_max 1024; for(i 0;i r1.rlim_max;i) close(i); fd0 open(dev/null , R_ODWR); fd1 dup(0); fd2 dup(1);//标准输入、输出、出错定义到dev/null }三、守护进程的惯例在UNIX系统中守护进程遵循以下公共惯例1.若守护进程使用锁文件则该文件通常存放在/var/run目录下。守护进程需要拥有超级用户权限才能在此目录下存放文件。文件名是name.pid例如corn的文件cornd.pid。2.若守护进程支持配置选项则其配置文件存放在/etc目录下。名称通常为name.conf3.守护进程可以由命令启动但通常都是被系统初始化脚本之一启动的(/etc/rc*或/etc/init.d/*)。如果守护进程在终止时应当被重新启动那么我们可以在/etc/inittab中为该守护进程添加_respawn配置项。这样init将重新启动该进程。4.当某守护进程拥有配置文件时可以捕捉SIGHUP信号表示配置文件被更改需要重读配置文件。
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2419565.html
如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!