UNIX精进:编程规则与精灵进程实践

需积分: 11 23 下载量 113 浏览量 更新于2024-08-06 收藏 18.16MB PDF 举报
"编程规则-鸿鹄论坛_华为认证h35-211-hcnp-access network题库" 本文档主要介绍了在UNIX环境编程时,尤其是编写守护进程(精灵进程)时应遵循的一些基本规则。守护进程是一种长期运行在后台,独立于控制终端的进程,常用于提供系统服务。以下是对这些规则的详细解释: 1. **调用fork并退出父进程**: 当创建守护进程时,首先通过调用`fork()`创建子进程,然后父进程退出。这确保了shell认为命令已完成执行,同时子进程继承了父进程的进程组ID但拥有新的进程ID,防止它成为进程组首进程,这对于后续调用`setsid`是必要的。 2. **调用setsid创建新会话**: 使用`setsid`函数,进程成为新会话的首进程、新进程组的首进程,并且失去对控制终端的关联。在某些UNIX系统(如SVR4)中,为了进一步确保守护进程不获取控制终端,可能会再次调用`fork`并让父进程退出。 3. **改变当前工作目录为根目录**: 守护进程应将当前工作目录更改为根目录`/`,避免依赖于可卸载的文件系统。如果守护进程需要在特定位置工作,比如行式打印机假脱机进程的工作目录通常会更改为它们的spool目录。 4. **设置文件创建屏蔽字为0**: 文件创建屏蔽字会影响新创建文件的权限。守护进程应设置文件创建屏蔽字为0,避免因继承的屏蔽字而拒绝设置某些权限,如组可读、写等。 5. **关闭不必要的文件描述符**: 守护进程应关闭不再需要的文件描述符,通常包括从父进程(可能是shell或其他进程)继承的描述符。具体关闭哪些描述符取决于守护进程的具体需求。 除了守护进程编程规则,文档还提到了UNIX基础知识,如登录、文件和目录、输入输出、进程和进程控制、C语言标准、错误处理、用户标识、信号、时间值、系统调用和库函数等。此外,还讨论了UNIX的标准化过程(如ANSI C、IEEE POSIX、X/Open XPG3、FIPS 151-1),以及不同UNIX实现之间的差异和限制。 这些知识对于理解UNIX环境下的高级编程至关重要,特别是对于系统服务的开发者和维护者来说,掌握这些规则能够确保守护进程稳定、安全地运行。