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+\)就会将退出信号送给前台进程组所有进程。
无论何时检测到调制解调器(或网络)已经断开连接,则将挂断信号发送给控制进程。
终端即字符型设备,可以通过串口直接和计算机连接,也可以远程的。这两种情况下,登录都要经过内核中的设备驱动程序。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+\)就会将退出信号送给前台进程组所有进程。
无论何时检测到调制解调器(或网络)已经断开连接,则将挂断信号发送给控制进程。
相关文章推荐
- 《APUE》笔记-第九章-进程关系
- UNIX环境高级编程学习之第九章进程关系-创建孤儿进程
- 第九章:进程关系
- 《UNIX环境高级编程》第9章 进程关系
- 《Linux Shell脚本攻略》 笔记 第九章:进程管理
- 《APUE》读书笔记—第九章进程关系
- 读书笔记-第九章 进程关系 第十章 信号
- 【复习笔记】被百度问过四次的进程与线程的关系
- 第九章 进程关系
- APUE阅读笔记(九)——进程关系
- [APUE]第九章 进程关系
- APUE函数笔记七: 进程关系
- 《UNIX环境高级编程》读书笔记之进程关系
- 《APUE》读书笔记—第九章进程关系
- APUE第九章 进程 4000 关系
- 《UNIX环境高级编程》笔记--进程的终止
- UNIX环境高级编程(第9章 进程关系)
- 《UNIX环境高级编程》第三部分进程之进程关系
- 《unix环境高级编程》-09、进程关系-读书笔记
- 深入浅出nodejs学习笔记--第九章 玩转进程管理