"UNIX环境高级编程(第十三章) - 精灵进程"
在UNIX操作系统中,精灵进程(Daemon)是一种特殊类型的后台进程,通常在系统启动时启动,并在系统关闭时终止。它们没有控制终端,因此不与任何终端用户交互,而是执行后台任务,如网络服务、日志记录、计划任务等。本章主要讨论精灵进程的特性和编程规则,以及如何处理错误记录和客户机-服务器模型。
13.1 引言
精灵进程的存在是为了完成系统的后台任务,它们与控制终端无关,这使得它们可以在用户无感知的情况下持续运行。编写精灵进程程序时,需要特别注意进程与控制终端的关系以及错误报告机制。
13.2 精灵进程的特征
精灵进程的特性包括:
- 长生存期:从系统启动到关闭,持续运行。
- 没有控制终端:它们不依赖于任何终端,这使得它们可以在用户无交互的环境下工作。
- 组成系统服务:如网络守护进程(如HTTP服务器)、系统管理服务(如cron定时任务)和日志记录服务(如syslogd)。
通过`ps`命令可以查看系统中的精灵进程。例如,`ps -axj`或`ps -efjc`(SVR4系统)会显示所有进程,包括没有控制终端的进程,以及它们的进程组、对话期ID等相关信息。
13.3 编程规则
创建精灵进程的一般步骤包括:
1. 分离控制终端:通过fork()创建子进程,然后让父进程退出,这样子进程就不再关联任何终端。
2. 修改会话领导权:使用setsid()函数使进程成为新的会话领导,进一步断开与控制终端的联系。
3. 关闭不必要的文件描述符:确保关闭标准输入、输出和错误,防止与任何终端或文件相关联。
4. 改变工作目录:通常将工作目录更改为根目录`/`,以避免对特定目录的依赖。
5. 设置文件创建掩码:用umask()函数设置适当的文件权限掩码,以便创建的文件具有预期的权限。
13.4 出错记录
由于精灵进程没有控制终端,出错时不能直接向用户显示,因此通常采用日志记录。有两种常见的日志系统:
- SVR4流log驱动程序:允许进程将日志消息写入流,这些消息随后会被传输到日志记录服务。
- 4.3+BSD syslog设施:提供一个接口,让进程能够将日志消息发送到 syslogd 进程,进而记录在指定的日志文件中。
13.5 客户机-服务器模型
精灵进程常用于实现客户机-服务器架构,其中服务器(通常是精灵进程)等待客户端请求,处理请求并返回响应。这种模式是分布式计算的基础,广泛应用于网络服务,如FTP、HTTP、DNS等。
13.6 小结
精灵进程在UNIX环境中扮演着重要的角色,它们是系统服务的核心组成部分。理解其特性和编程规则对于开发可靠、高效的后台服务至关重要。正确处理错误记录和实现客户机-服务器交互是构建有效精灵进程的关键。