进程(三)守护进程

在操作系统的知识中感觉守护进程所涉及到的知识很多,系统总结下,大多参考apue。

一、基本概念
守护进程也称精灵进程(daemon)是生存期较长的一种进程。它们常常在系统自举时启动,仅在系统关闭时才终止。它们没有控制终端,都是在后台运行的。可以用命令ps -axj来查看系统的守护进程,下面只列出感兴趣的守护进程,最后两项为系统的ftp和apache服务。

 PPID   PID  PGID   SID TTY      TPGID STAT   UID   TIME COMMAND
    0         1        1       1 ?           -1                 Ss       0   0:00 init [3]
    1  2475  2475  2475 ?           -1                Ss       0   0:00 syslogd -m 0
    1  3129  3129  3129 ?           -1                Ss       0   0:00 crond
    1  2912  2912  2912 ?           -1                Ss       0   0:00 /usr/sbin/vsftpd /etc/vsftpd/vsftpd.conf
    1  3113  3113  3113 ?           -1                Ss       0   0:00 /usr/sbin/httpd

这里UID为0表示为超级用户,TPGID表示此会话没有前台进程组

 

init进程
进程ID为1的通常为init进程,在自举过程结束时由内核调用。此进程负责在自举内核后启动一个UNIX系统,init通常读与系统有关的初始化文件,并将系统引导到一个状态,这个进程绝不会终止(我kill了下,果然还在,可能是自动重启的),它以超级用户特权运行,并成为所有孤儿进程的父进程。

syslogd进程
由于守护进程没有终端,而且并不希望所有的守护进程都写到控制台终端上。所以需要有一个集中的守护进程出错记录措施,现在大多数的守护进程都是用syslog设施。大多数的用户进程(守护进程)调用syslog函数(syslog()  generates a log message, which will be distributed by syslogd(8).)以产生日志消息,这使得消息发送至UNIX域数据报套接字/dev/log,然后发送至syslogd(Sysklogd provides two system utilities which provide support for system logging and kernel message trapping.  Support of both internet and  unix domain sockets enables this utility package to support both local and remote logging)。这里其实提供了一个思路,日志系统完全也可以做成网络服务的形式,这样不仅在本地,也可以随时的把系统的运行情况提供给远程的监控端。

crond进程
crond守护进程在指定的日期和时间执行指定的命令。许多系统管理任务是由crond定期执行相关程序而实现的。

二、守护进程的编程规则
1)调用umask将文件模式创建屏蔽字设置为0。由继承得来的文件模式创建屏蔽字可能会拒绝设置某些权限。例如守护进程要创建一个组可读、写的文件,而继承的文件模式创建屏蔽字可能屏蔽了这两种权限,于是所要求的组可读、写就不能起作用。
2)调用fork然后使得父进程退出exit。
3)调用setsid以创建一个新的会话。调用setsid使得调用进程:
 a)成为新创建会话的首进程
 b)成为一个新进程组的组长进程(如果之前之歌进程为进程组的组长,那么setsid的调用就会出错,这也是先fork的原因)
 c)没有控制终端。这也是fork和setsid的最终目的
4)将当前工作目录更改为根目录,或者特定的目录。但必须保证这个目录是一直存在的。
5)关闭不需要的文件描述符(fork之后一般都要做的)。
6)某些守护进程打开/dev/null使其具有文件描述符0、1、2这样任何一个试图读标准输入、写标准输出或标准出错的库例程都不会有任何效果。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值