天天看点

进程之间的关系(UNIX高级环境编程)

1、系统登录(与系统启动过程相同吗?这里是在我们进入系统后会显示登录用户,并输入密码。这样一个用户登录。)

系统管理者创建一个通常名为/etc/tty的文件,当内核自举时,内核创建进程init,init读取/etc/tty文件,为每一个允许登录的终端设备,init调用一次fork,它所生成的子进程则执行程序getty。getty对终端设备调用open函数,以读写方式将终端打开。一旦终端设备被打开,则文件描述符0,1,2就被设置到该设备。然后getty输出“login”之类的信息。当用户键入了用户名后,getty就完成了。

linux终端登录需要的login和password与登录linux的用户和密码等同。

2、网络登录

作为系统启动的一部分,init进程调用一个shell,使其执行shell脚本etc/rc。由此shell启动一个精灵进程inetd。一旦此shell脚本终止,inetd的父进程就变成了init。inetd等待TCP/IP连接请求的到达,当一个连接请求到达时,inetd执行一次fork,在子进程中执行相关的操作。(inetd只是一个等待连接请求的进程。inetd是不是只用在终端(网络)登录时的情况。)

网络登录过程中,服务进程中所涉及的进程,以及他们之间的关系。

3、进程组和对话期

每一个进程组都有一个组长进程,组长进程的ID就是该进程组的ID。组长进程可以创建一个进程组,创建该组中的进程,然后终止。进程组的生命期。

下一节会介绍如何把一个信号送给一个进程或进程组,waitpid则被用来等待一个进程或者指定进程组中的一个进程。

对话期是一个或多个进程的组合。进程调用setsid可建立一个新对话期。

继续阅读