- 1、本文档共38页,可阅读全部内容。
- 2、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
第9章进程的关系
第9章进程关系
9.1 引言
在上一章我们已了解到进程之间具有关系。
每个进程有一个父进程。当子进程终止时,父进程会得到通知并能取得子进程的退出状态。
在8 . 6节说明w a i t p i d函数时,我们也提到了进程组,以及如何等待进程组中的任意一个进程终止。
本章将更详细地说明进程组以及P O S I X . 1引进的对话期新概念。还将介绍登录s h e l l(登录时所调用的)和所有从登录s h e l l起动的进程之间的关系。
在说明这些关系时不可能不谈及信号,而谈论信号又需要很多本章介绍的概念。如果你不熟悉U N I X信号,则可能先要浏览一下第1 0章。
9.2 终端登录
先看一看登录到U N I X系统时所执行的各个程序。在早期的U N I X系统中,例如V 7,用户用哑终端(通过R S - 2 3 2连到主机)进行登录。终端或者是本地的(直接连接)或者是远程的(通过调制解调器连接)。在这两种情况下,登录都经由内核中的终端设备驱动程序。例如,在P D P - 11上常用的设备是D H - 11和D Z - 11。因为连到主机上的终端设备数已经确定,所以同时的登录数也就有了已知的上限。下面说明的登录过程适用于使用一个R S - 2 3 2终端登录到U N I X系统中。
9.2.1 4.3+BSD终端登录
登录过程在过去1 5年中并没有多少改变。系统管理者创建一个通常名为/ e t c / t t y s的文件,其中,每个终端设备有一行,每一行说明设备名和传到g e t t y程序的参数,这些参数说明了终端的波特率等。当系统自举时,内核创建进程ID 1,也就是i n i t进程。i n i t进程使系统进入多用户状态。i n i t读文件/ e t c / t t y s ,对每一个允许登录的终端设备, i n i t调用一次f o r k,它所生成的子进程则执行程序g e t t y。这种情况示于图9 - 1中。
图9 - 1中各个进程的实际用户I D和有效用户I D都是0 (也就是它们都具有超级用户特权)。i n i t以空环境执行g e t t y程序。
g e t t y对终端设备调用o p e n函数,以读、写方式将终端打开。如果设备是调制解调器,则o p e n可能会在设备驱动程序中滞留,直到用户拨号调制解调器,并且线路被接通。一旦设备被打开,则文件描述符0、1、2就被设置到该设备。然后g e t t y输出“l o g i n:”之类的信息,并等待用户键入用户名。如果终端支持多种速度,则g e t t y可以测试特殊字符以便适当地更改终端速度(波特率)。关于g e t t y程序以及有关数据文件的细节,请参阅U N I X手册。
当用户键入了用户名后,g e t t y就完成了。然后它以类似于下列的方式调用l o g i n程序:
execle(/usr/bin/login, login, -p, username, (char *) 0, envp);
(在g e t t y t a b文件中可能会有一些选择项使其调用其他程序,但系统默认是l o g i n程序)。i n i t以一个空环境调用g e t t y。g e t t y以终端名(例如TERM=foo, 其中终端f o o的类型取自g e t t y t a b文件)和在g e t t y t a b中的环境字符串为l o g i n创建一个环境( e n v p参数)。-p标志通知l o g i n保留传给它的环境,也可将其他环境字符串加到该环境中,但是不要替换它。图9 - 2显示了l o g i n刚被调用后这些进程的状态。
因为最初的i n i t进程具有超级用户优先权,所以图9 - 2中的所有进程都有超级用户优先权。
图9 - 2中底部三个进程的进程I D相同,因为进程I D不会因执行e x e c而改变。并且,除了最初的i n i t进程,所有的进程均有一个父进程I D。
login 能处理多项工作。因为它得到了用户名,所以能调用getpwnam 取得相应用户的口令文件登录项。然后调用g e t p a ss(3)以显示提示“ P a s s w o r d:”接着读用户键入的口令(自然,禁止回送用户键入的口令)。它调用c r y pt(3)将用户键入的口令加密,并与该用户口令文件中登录项的p w _ p a s s w d字段相比较。如果用户几次键入的口令都无效,则login 以参数1调用exit 表示登录过程失败。父进程( i n i t)了解到子进程的终止情况后,将再次调用f o r k,其后又跟随着执行g e t t y,对此终端重复上述过程。
如果用户正确登录,
l o g i n就将当前工作目录更改为该用户的起
文档评论(0)