您的位置:首页 > 编程语言

UNIX环境高级编程第九章进程关系 读后笔记

2011-11-01 16:00 309 查看
    (1)本章首先介绍了UNIX/LINUX的终端登录。

      终端即字符型设备,可以通过串口直接和计算机连接,也可以远程的。这两种情况下,登录都要经过内核中的设备驱动程序。TTY这个名词既可以指物理的串行端口,也可以指Linux中检视串行端口、读取数据的程序(叫做TTY ).下面说一下,在BSD中用户通过终端登录的过程。系统创建名为/etc/ttys的文件,每一行都说明每个终端的设备名和传递给getty程序的参数(例如终端的波特率等)。init进程读取/etc/ttys,对每一个设备调用一个fork,生成的子进程通过exec一个getty程序。getty为每个终端设备调用open函数,以读写方式打开终端(在这里终端已经映射成了tty文件)。然后,文件描述符0、1、2被设置到该设备中。(这句话不太明白,什么叫设置到该设备中呢?)。然后getty输出“login:”之类的信息。(应该是在console中输出吧),等待用户键入用户名。当用户键入用户名后,然后利用execle执行login程序。login程序得到用户名,并且利用shadow文件和getpass和crypt验证用户。如果用户正确,login程序执行如下工作:(1)改变当前工作目录为用户的起始目录。(2)调用chown改变终端的所有权,是登陆用户成为其所有者。(3)将该终端设备的访问权限改用用户读写。(4)调用setgid及initgroups设置进程的组ID(5)用login得到的信息初始化环境:起始目录、shell、用户名、系统默认路径,即各种环境变量。之后shell开始运行,它的父进程是init,将shell的文件描述符0、1、2设置为终端设备。现在,shell读取其启动文件。

(2)之后,介绍了网络登陆的情况。

   网络登陆与终端登录最主要的区别在于,网络登陆不是通过点对点的链接,而是一种网络服务,通过网卡进行通讯。为使一个软件既能处理终端login,又能处理网络login,系统使用了一种称为伪终端的软件驱动程序。

   作为系统启动的一部分,init调用一个shell,shell执行脚本/etc/rc,由该脚本启动守护进程inetd,initd等待TCP/IP链接,一旦有链接,执行一次fork,生成适当的子进程。例如到达了一个针对telnet服务进程的TCP链接请求。则,上述的适当子进程即telnet服务进程(telnetd)。telnetd打开一个伪终端设备,fork分成两个进程,父进程处理通过网络的通信,子进程执行login程序。父子进程通过伪终端相连。

(3)进程组

   进程组是一个进程或者多个进程的集合,与同一作业相关联,可以接受来自同一终端的各种信号。(信号来自终端?终端和信号是什么关系?)

   每个进程组都有一个组长进程,其进程ID等于该进程组ID。

(4)会话

   会话是一个或者多个进程组的集合。

(5)控制终端

   会话和进程组有一些特性:

      一个会话可以有一个控制终端(controlling terminal)。通常是登陆到其上的终端设备(终端登录情况下)或者伪终端设备(网络登录情况下)。

      建立与控制终端连接的会话首进程被称为控制进程(controlling process)。

      一个会话中的几个进程组,可被分为前台进程组和后台进程组。

      无论何时键入中断键(CTRL+C)就会将中断信号送给前台进程组所有进程。

      无论何时键入退出键(CTRL+\)就会将退出信号送给前台进程组所有进程。

      无论何时检测到调制解调器(或网络)已经断开连接,则将挂断信号发送给控制进程。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息