(进程关系)进程组、会话

控制终端:
    当用户自举时,会创建init进程,进程号为1. init的创建使系统进入多用户状态。对于每个允许登录的设备,intit进程用一次fork,它所生成
的子进程则执行exec(getty)程序。

然后login程序将执行以下操作 :
    1、将当前的工作目录设为用户的起始目录(chdir)
    2、调用chown改变终端的用户所有权,使登录用户成为它的所有者。
    3、将该终端设备的访问权限设为读和写。
    4、调用setgid和initgroups设置进程的组ID
    5、用login所得到的所有信息初使化环境:起始目录(HOME)、shell(SHELL)、用户名(USER和LOGNAME),以及一个系统默认路径(PATH)。
    6、login进程改变为登录用户的用户ID(setuid)并调用该用户的登录shell。如下
         execl("/bin/sh","-sh",(char*)0)。


进程组:
    进程组是多个进程的集合。
    每个进程组有一个组长进程,组长进程的ID和该进程组的ID相同。
     setgpid(pid_t pid,pit_t pgid)函数pid进程的进程组ID设置为pgid。如果这两个数相等,则由pid指定的进程变成组长进程,当然进程只有给自己或者其子进程指定组长进程。如果pid=0,则使用调用者的ID。如果pgid==0,则将pid指定的进程ID作为组长ID。
    在大多数的作业控制shell中,在fork

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




























原文地址:https://www.cnblogs.com/yml435/p/4655466.html