欢迎来到天天文库
浏览记录
ID:55720542
大小:47.00 KB
页数:18页
时间:2020-05-28
《unix环境高级编程--第9章 进程关系.doc》由会员上传分享,免费在线阅读,更多相关内容在工程资料-天天文库。
1、发信人: scircle (yuanyuan), 信区: Security 标 题: unix环境高级编程--第9章 进程关系 发信站: BBS 水木清华站 (Mon Mar 27 16:00:58 2000) 第九章〓进程关系 91〓引言 在上一章我们已了解到进程之间具有关系。首先,每个进程有一个父进程。当子进 程终止时 ,父进程会得到通知并能取得子进程退出状态。在86节说明waitpicl函数时,我 们也提到 了进程组,以及如何等待进程组中的任一个进程终止。 本章的更详细地
2、说明进程组以及POSIX1引进的对话期新概念。我们也将介绍log in shell( 是我们登录时为我们调用的)和所有从login shell起动的进程之间的关系。 在说明这些关系时不可能不谈及信号,而谈论信号又需要很多本章介绍的概念。如 果你不熟 悉Unix信号,则可能先要浏览一下第十章。 92〓终端登录 先看一看登录到Unix系统时所执行的各个程序。在早期的Unix系统中,例如Versi on7,用户 用哑终端(通过RS-232连到主机)进行登录。终端或者是在地的(直接连接)或者是远 程的(
3、通 过调制解调器连接)。在这两种情况下,login都经由系统核中的终端设备驱动程序 。例如, 在PDP-11上常用的设备是DH-11和DZ-11。因为连到主机上的终端设备数已经确定, 所以同时 的 login数也就有了已知的上限。下面说明的登录过程适用于使用一个RS-232终端登 录到Unix 系统中。 43+BSD终端登录 登录过程在过去十五年中并没有多少改变。系统管理者创建一个通常名为/etc/ thys的文 件 ,其中,每个终端设备有一行。每一行说明设备名和传到getty程序的参数。这些 参数
4、说明 了终端的波特率等。当系统自举时,系统核创建进程ID1,也就是init进程。init 进程供系 统进入多用户状态。init读文件/etc/ttys,对每一个允许登录的终端设备,ini t拥有一次 fork,它所生成的子进程则执行(exec)程序getty。这种情况示于图91中。 图91 init生成进程使终端可用于login 图91中,各个进程的实际用户ID和有效用户ID都是0(也就是它们都具有超级用户 特权)。i nit以空环境exec getty程序。 getty对终端设备调用open
5、画数。以读、写方式将终端打开。如果设备是调制解调 器,则Ope n可能会在设备驱动程序中滞留,直到用户拨号调制解调器,并且线路被接通。一 旦设备被 打开,则文件描述符0,1,2就被设置到该设备。然后getty输出login之类的信息 ,并等待 用户键入用户名。如果终端支持多种速度,则getty可以测试特殊字符以便适当地 更改终端 速度(波特率)。关于getty程序以及有关数据文件的细节,请参改Unix手册。 当用户键入了用户名后,getty就完成了。然后它以类似于下列的方式调用login程 序: ex
6、ecle("/usr/bin/login","login""-p",username,(char*)O,enup);(在getty tab文件 中可能会有一 些选择项使其调用其它程序,但系统默认是login程序。)init以一个空环境调用g etty。get ty以终端名(例如TERM=foo,其中终端foo的类型取自gettytab文件)和在gettytab中 的环境字 符串为login创建一个环境(enup参数)。-p标志通知login保留传给它的环境,也可 将其它环 境字符串加到该环境中,但是不要代
7、换它。图92显示了在login刚被调用后这些 进程的状 态。 图92 login刚被调用后各进程的状态 因为init进程具有超级用户优先权,所以图92中的所有进程都有超级用户优先权 。图92 中底部三椎是一个进程,它们的进程ID和父进程ID都不会因执行exec而改变。 login的工作主要是:因为它得到了用户名,所以就能调用getpwnam取得相应用户 的口令字 文 件登记项。然后调用getpass(3)以显示提示Password;接着读用户键入的口令字( 自然,禁 止回适用户键入的口令字
8、)。它调用crypt(3)将用户键入的口令字转换成密码,并 与该用户 口令字文件中的登记项的pw 迹茫模*常病絧asswd字段相比较。如果用户几次键入 的口令字 都无效,则lo gin以参数1调用exit表示登录过程失败。父进程(init)了解到子进程的终止情况后 ,将再次 调用fork,其后又跟随着exec getty,对此终端重复上述过程。 如果用户正确登录,login就将当前工作目录更改为该用户的起始目录(chdir)
此文档下载收益归作者所有