《UNIX环境高级编程》第13章 守护进程 【读书笔记】

  • 守护进程也称精灵(daemon)进程是生存期较长的一种进程。在系统自举时启动,系统关闭时终止。没有控制终端,后台运行。
  • 父进程ID为0的进程通常是内核进程,它们作为系统自举过程的一部分而启动,init是例外,它是内核自举时的用户层命令。内核进程是特殊的,通常存在 于系统的整个生命期中,以超级用户特权运行,无控制终端,无命令行。
  • 进程1通常是init,负责启动各运行层次特定的系统服务,这些服务通常是在它们自己拥有的守护进程的帮助下实现的。
  • 几个重要守护进程:keventd(为在内核中运行计划执行的函数提供进程上下文);kapmd(对高级电源管理提供支持);kswapd(也称页面调出守护进程pageout daemon,通过将脏页面低速写磁盘而使这些页面在需要时仍可回收使用,这种方式支持虚存子系统);bdflush和kupdated(将高速缓存中的数据冲洗到磁盘。当可用内存达下限时,bdflush将脏缓冲区从缓冲池buffer cache冲洗到磁盘。每隔一定时间间隔,kupdated将脏页面冲洗到磁盘,以系统失效时减少丢失数据);portmap(商品映射守护进程,提供将RPC程序号映射为网络端口号的服务);syslogd(把系统消息记入日志);inetd(侦听系统网络接口,取得来自网络的对各种网络服务进程的请求);nfsd,lockd,rpciod(提供对网络文件系统NFS的支持);crond(在指定日期和时间执行指定命令);cpusd(打印假脱机进程,处理对系统提出的所有打印请求)。
  • 大多数守护进程的父进程是init进程。
  • BSD syslog是得到广泛应用的守护进程出错记录设施。有三种方法产生日志消息:1)内核例程调用log函数;2)用户进程 (守护进程)调用syslog函数;3)本机用户进程或通过TCPIP连接的他机上的一个用户进程可将日志消息发送到UDP端口514。
  • syslogd守护进程通常读取三种格式的日志消息,它的接口是syslog函数:openlog,syslog,closelog,setlogmask。
  • 大多数syslog实现将使消息短时间处于队列中。如果在此段时间中到达了重复消息,那么syslog守护进程将不把它写到日志记录中,而是打印输出一条消息,类似于“上一条消息重复了N次”。
  • 为了正常运行,有些守护进程实现为单实例的,也就是在任一时刻只运行该守护进程的一个副本。比如定时守护cron。
  • 文件锁和记录锁是一种方法。一个守护进程创建一个文件,并在整个文件上加一把写锁,就可阻止更多实例的创建了。文件和记录锁提供了方便的互斥机制,守护进程在终止时锁会自动删除,简化了复原所需处理。接口是lockfile(fd)。
  • 守护进程的惯例:
    • 若守护进程使用锁文件,那么该文件通常存入在/var/run目录中。锁文件的名字通常是name.pid,name 该守护进程或服务的名字。
    • 若守护进程 支持配置选项,那么配置文件通常存放在/etc目录中。名字为name.conf。
    • 守护进程可用命令行启动,但通常是由系统初始化脚本之一(/etc/rc*或/etc/init.d/*)启动的。若在守护进程终止时自动重启,可在/etc/inittab中为该守护进程包括_respawn记录项,这样init就将重启该守护进程。
    • 若守护进程有配置文件,则启动时会读,但此后一般不会再查看。若更改配置文件后需要重读,可使守护进程捕获SIGHUP信号,当它接收到此信号时,重读配置文件(需要自己实现相关逻辑:可用多线程,然后在子线程中sigwait,也可以只用一个线程,通过sigaction注册相关信号处理函数来完成)。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值