“session leaders” in `ps`
What are “session leaders” in `ps`?
CSDN/The Linux Process Principle, PID、PGID、PPID、SID、TID、TTY
在 Linux 中,每个进程都有若干相关的”数值“:
PID,进程号
用于标识进程的任意数值。每个进程都具有唯一的进程号,在进程退出后且父进程检索退出状态后,会释放进程号以留作新进程使用。
PPID,父进程号
启动进程的进程的进程号。
PGID,进程组号
每个进程都属于某个进程组(Process Group),在每个进程组中可以包含多个进程。每个进程组都会有一个领导进程(Process Group Leader),领导进程的进程号为进程组号,以识别进程组。领导进程可以先退出,但是进程组依然存在,并具有相同的进程组号,直到在进程组中的最后一个进程结束。进程组简化进程操作,可以以组为单位进行管理。
SID,会话号
在Shell支持作业控制(Job Control)的前提下,多个进程组还可以构成单个会话。(1)每个会话有单个或多个进程组组成,可以存在单个领头进程,也可以没有。(2)会话领导进程的进程号会识别为会话号。(3)在会话中的进程组称为作业(Job)。(4)会话可以有一个进程组成为会话的前台作业(Foreground Job),而其他的进程组是后台工作(Background Job)。(5)每个会话可以连接一个控制终端(Control Terminal)。当控制终端有输入输出时,都传递给该会话的前台进程组。由终端产生的信号,比如CTRL+Z、CTRL+C等等,会传递到前台进程组。(6)会话的意义在于将多个作业(进程组)囊括在一个终端,并取其中某个作业作为前台,来直接接收该终端的输入输出以及终端信号,其他作业在后台运行。
会话与进程组只是将相关进程作为管理单元的方式。在进程组里的所有成员总是属于相同会话,但是单个会话中可能有多个进程组。
通常,Shell是单个会话领导,由该Shell执行的管道将是进程组。这便于在退出时结束Shell的子进程。
RGID and EGID, PGID and SGID
GID, current, primary, supplementary, effective and real group IDs?
在 Linux 中:(1)每个用户都具有组号,分为主要组号(Primary Group ID)与附属组号(Supplementary Group ID);(2)每个进程具有所属的用户组号,分为实际组号(Real Group ID)与有效组号(Effective Group ID)。这是两个概念:
RUID and EUID
Difference between owner/root and RUID/EUID
在 Linux 中,每个进程都具有所属的用户号,分为实际用户号(Real User ID)与有效用户号(Effective User ID):
实际用户号(RUID)及实际组号(RGID),有效用户号(EUID)及有效组号(EGID)
(这段内容与前面的有些重复,但是说的是相同的概念)
实际用户号和实际用户组号:标识我是谁(据说这是一个变态的哲学问题,难死一片哲学家),也就是登录用户的uid和gid,比如我的Linux以simon登录,在Linux运行的所有的命令的实际用户号都是simon的uid,实际用户组号都是simon的gid(可以用id命令查看)。
有效用户号和有效用户组号:进程用来决定我们对资源的访问权限。一般情况下,有效用户号等于实际用户号,有效用户组号等于实际用户组号。当文件设置 setuid 位时,则有效用户号等于文件的所有者的用户号,而不是实际用户号;当文件设置 setgid 位时,则有效用户组号等于文件所有者的组号,而不是实际用户组号。
总结(非技术)
一般情况下,但凡是”实际的“(Real)都是不太会变化的、原始既有的属性。而”有效的“(Effective)都是会变化的、当前正在使用的属性。