Unix高级编程:进程关系与登录shell详解

需积分: 0 1 下载量 99 浏览量 更新于2024-07-31 收藏 562KB PDF 举报
本章节主要探讨的是Unix环境高级编程中的"进程关系",特别是针对9.2终端登录部分。在Unix系统中,用户登录的过程是一个核心操作,它涉及到多个关键组件和交互。早期的Unix系统,如V7,用户通过R S-232连接哑终端进行登录,无论是本地还是远程,登录都依赖于内核的终端设备驱动程序,如D H-11和DZ-11。这些终端设备的数量限制了同时登录的最大人数。 系统管理者会维护一个"/etc/ttytabs"文件,记录每个终端设备及其相关的参数,如波特率等。启动时,内核创建进程ID1(init进程),它负责将系统带入多用户模式。init进程会遍历该文件,对每个允许登录的终端调用fork函数,生成子进程,然后执行getty程序。getty负责管理和控制终端,包括打开终端设备以便进行读写操作。 值得注意的是,图9-1中的实际用户ID和有效用户ID在getty进程启动时都是0,意味着它们具有超级用户权限。getty程序以空环境启动,这意味着它不会继承任何环境变量。当终端设备为调制解调器时,open函数可能在设备驱动程序层面被阻塞,直到用户完成拨号连接。 此外,本章还将深入讨论进程组的概念,这是Unix系统中用于管理一组相关进程的方式,使得父进程可以同时监控和协调子进程的行为。进程组在处理多任务、信号传递以及进程间的同步等方面发挥着重要作用。章节还会提及POSIX.1引入的对话期新概念,这可能是对进程交互的一种扩展或优化。 此外,虽然没有明确提及,但提到的信号处理也是这一章不可或缺的一部分,因为它们与进程间通信密切相关。如果读者对Unix信号不熟悉,可能需要参考第10章进行补充学习,因为信号在许多操作系统级交互中扮演着核心角色。 这一章深入剖析了Unix系统中的进程关系,包括终端登录流程、进程组管理、getty的作用以及信号的运用,这些都是理解Unix高级编程不可或缺的知识点。