当前位置:嗨网首页>书籍在线阅读

04-编写daemon指南

  
选择背景色: 黄橙 洋红 淡粉 水蓝 草绿 白色 选择字体: 宋体 黑体 微软雅黑 楷体 选择字体大小: 恢复默认

37.3 编写daemon指南

前面曾经提及过,一个daemon通常只有在系统关闭的时候才会终止。很多标准的daemon是通过在系统关闭时执行特定于应用程序的脚本来停止的。而那些不以这种方式终止的daemon会收到一个SIGTERM信号,因为在系统关闭的时候init进程会向所有其子进程发送这个信号。在默认情况下,SIGTERM信号会终止一个进程。如果daemon在终止之前需要做些清理工作,那么就需要为这个信号建立一个处理器。这个处理器必须能快速地完成清理工作,因为init在发完SIGTERM信号的5秒之后会发送一个SIGKILL信号。(这并不意味着这个daemon能够执行5秒的CPU时间,因为init会同时向系统中的所有进程发送信号,而它们可能都试图在5秒内完成清理工作。)

由于daemon是长时间运行的,因此要特别小心潜在的内存泄露问题(参见7.1.3节)和文件描述符泄露(即应用程序没有关闭所有打开着的文件描述符)。如果此类bug影响到了daemon的运行,那么唯一的解决方案是杀死它,之后(修复了bug)再重新启动它。

很多daemon需要确保同一时刻只有一个实例处于活跃状态。如让两个cron daemon都试图实行计划任务毫无意义。在55.6节中将会介绍完成这个任务的技术。