unix环境高级编程-读书笔记(7)

终端登陆:

1BSD终端登陆:当 系统自举时,内核创建进程ID为1的进程,也就是init进程,init进程使系统进入多用户模式,init读取文件/etc/ttys,对每一个允许登陆的终端,init调用一次fork,所生成的子进程则exec getty程序。getty对终端设备调用open函数,将终端打开,然后getty输出login之类的信息,等待用户输入用户名。



进程组:

是一个或多个进程的集合,同一进程组中的各进程接收来自同一终端的各种信号,每个进程组有唯一的进程组ID,每个进程组有一个组长,组长可以创建一个进程组、创建该组的进程,只要进程组有一个进程存在,则进程组存在。

一个进程只能为它自己或者子进程设置进程组ID,在子进程调用了exec后,就不能在更改子进程的进程组ID。

一般胡在fork之后调用此函数,使父进程设置其子进程的进程组ID,并且使子进程设置其自己的进程组ID,这两个调用有一个是冗余的,但让父进程和子进程都这样做能够保证,在父进程和子进程认为子进程已进入该进程组之前,这确实已经发生了,如果不这样做,在fork之后,由于父进程和子进程运行先后顺序不一定,会因为子进程的组员身份取决于哪个进程首先执行而产生竞争条件。


你可能感兴趣的:(Linux)