守护进程:后台运行与文件描述符管理

需积分: 34 3 下载量 108 浏览量 更新于2024-08-25 收藏 970KB PPT 举报
"这篇文档主要讨论的是如何关闭打开的文件描述符,特别是在守护进程的上下文中。守护进程是在后台运行的、与终端无关联的进程,通常用于执行系统管理任务。在守护进程的实现过程中,确保正确关闭文件描述符是非常重要的,因为这不仅能够释放系统资源,还能避免不必要的错误和文件系统卸载问题。 守护进程的特点在于其后台运行的性质,需要与初始运行环境隔离,包括文件描述符、控制终端、会话、进程组、工作目录和文件创建掩模等。这些环境通常是从父进程(尤其是shell)那里继承的。守护进程的启动方式多样,有的在系统初始化时由脚本启动,有的由inetd超级服务器启动,还有的可以由用户终端直接启动。 在处理消息时,由于守护进程没有控制终端,所以通常会使用syslog函数将消息发送到syslog守护进程,以便记录和通知。对于消息的类型,既有常规的通告,也有紧急事件通知,需要管理员进行处理。 在进程管理中,进程属于一个进程组,进程组号是组长的进程号。通过setpgid系统调用可以改变进程所属的进程组或创建新的进程组。会话期可以包含多个进程组,而登录会话有一个控制终端,这个终端通常对应用户的登录终端。当控制终端断开时,会向控制进程发送SIGUP信号。 创建守护进程的关键步骤之一是调用setsid系统调用,这将创建一个新的会话,使得进程成为新会话的组长和进程组组长,从而彻底脱离原来的终端控制。" 知识点如下: 1. 文件描述符:进程从父进程继承打开的文件描述符,如果不关闭,会浪费资源且可能导致文件系统无法卸载。 2. 守护进程:在后台运行,与终端无关联,常用于系统管理任务,需要脱离初始环境。 3. 关闭文件描述符:通过循环遍历并调用close函数来关闭所有文件描述符。 4. 守护进程启动:可以通过系统初始化脚本、inetd超级服务器或用户终端启动。 5. syslog:用于守护进程输出消息,特别在没有控制终端的情况下。 6. 进程组和会话期:进程属于一个进程组,会话期可以包含多个进程组,setsid用于创建新的会话。 7. 控制终端:会话期有一个控制终端,与主机断开时会发送SIGUP信号。 8. setsid系统调用:创建新的会话和进程组,帮助守护进程脱离终端控制。