Unix高级编程009_进程关系
- 格式:pdf
- 大小:5.18 MB
- 文档页数:19


发信人: scircle (yuanyuan), 信区: Security标题: unix环境高级编程--第8章进程控制(上)发信站: BBS 水木清华站 (Mon Mar 27 15:58:55 2000)第八章〓进程控制8 1〓引言本章介绍Unix的进程控制,包括创建新进程、执行程序和进程终止。
我们也说明进程的各种ID〖CD2〗实际、有效和保存的用户和组ID,以及它们如何受到进程控制原语的影响。
本章也包括了解释器文件和system函数。
本章以大多数Unix系统所提供的进程会计机制结束。
这使我们从一个不同角度了解进程控制功能。
8 2〓进程标识每个进程都有一个非负整型的唯一进程ID。
因为进程ID标识符总是唯一的,常将其用作为其它标识符的一部分以保证其唯一性。
在5 13节中的tmpnam函数将进程ID作为名字的一部分创建一个唯一的路径名。
有某些专用的进程:进程ID0是调度进程,常常被称为交换进程(swapper)。
该进程并不执行任何磁盘上的程序。
〖CD2〗它是系统核的一部分,因此也被称为系统进程。
进程ID1通常是init进程,在自举过程结束时由系统核调用。
该进程的程序文件在Unix的较早版本中是/etc/init,在版新版本中是/sbin/init。
此进程负责在系统核自举后起动一个Unix系统。
init通常读与系统有关的初始化文件(/etc/rc*文件),并将系统引导到一个状态(例如多用户)。
init进程决不会终止。
它是一个普通的用户进程(与交换进程不同,它不是一个在系统核内的系统进程),但是它以超级用户特权运行。
在本章稍后部分会说明init如何成为所有孤儿进程的父进程。
在某些Unix的虚存实现中,进程ID2是页精灵进程(pagedaemon)。
此进程负责支持虚存系统的请页操作。
除了进程ID,每个进程还有一些其它标识符。
下列函数返回这些标识符。
#include <sys/types h>#include <unistd h>pid 迹茫模*常病絫 getpid(voide;〓〓〖CD2〗调用进程的进程IDpid 迹茫模*常病絫 getppid(void);〓〓〖CD2〗调用进程的父进程IDuid 迹茫模*常病絫 getuid(void);〓〓〖CD2〗调用进程的实际用户IDuid 迹茫模*常病絫 geteuid(void);〓返回:〓〓〖CD2〗调用进程的有效用户IDgid 迹茫模*常病絫 getgid(void);〓〓〖CD2〗调用进程的实际组IDgid 迹茫模*常病絫 getegid(void);〓〓〖CD2〗调用进程的有效组ID注意,这些函数都没有出错返回,在下一章中讨论fork函数时,将进一步讨论父进程ID。
发信人: scircle (yuanyuan), 信区: Security标题: unix环境高级编程--第9章进程关系发信站: BBS 水木清华站 (Mon Mar 27 16:00:58 2000)第九章〓进程关系9 1〓引言在上一章我们已了解到进程之间具有关系。
首先,每个进程有一个父进程。
当子进程终止时,父进程会得到通知并能取得子进程退出状态。
在8 6节说明waitpicl函数时,我们也提到了进程组,以及如何等待进程组中的任一个进程终止。
本章的更详细地说明进程组以及POSIX 1引进的对话期新概念。
我们也将介绍login shell(是我们登录时为我们调用的)和所有从login shell起动的进程之间的关系。
在说明这些关系时不可能不谈及信号,而谈论信号又需要很多本章介绍的概念。
如果你不熟悉Unix信号,则可能先要浏览一下第十章。
9 2〓终端登录先看一看登录到Unix系统时所执行的各个程序。
在早期的Unix系统中,例如Versi on7,用户用哑终端(通过RS-232连到主机)进行登录。
终端或者是在地的(直接连接)或者是远程的(通过调制解调器连接)。
在这两种情况下,login都经由系统核中的终端设备驱动程序。
例如,在PDP-11上常用的设备是DH-11和DZ-11。
因为连到主机上的终端设备数已经确定,所以同时的login数也就有了已知的上限。
下面说明的登录过程适用于使用一个RS-232终端登录到Unix系统中。
4 3+BSD终端登录登录过程在过去十五年中并没有多少改变。
系统管理者创建一个通常名为/etc/thys的文件,其中,每个终端设备有一行。
每一行说明设备名和传到getty程序的参数。
这些参数说明了终端的波特率等。
当系统自举时,系统核创建进程ID1,也就是init进程。
init进程供系统进入多用户状态。
init读文件/etc/ttys,对每一个允许登录的终端设备,init拥有一次fork,它所生成的子进程则执行(exec)程序getty。