pid,ppid,pgid,sid进程间关系

进程间关系

进程组

Linux 下每个进程都隶属于一个进程组,因此它们除了 PID 信息外,还有进程组 ID(PGID)。我们可以用如下函数来获取指定进程的 PGID:

#include 
pid_t getpgid( pid t pid );

该函数成功时返回进程 pid 所属进程组的 PGID,失败则返回-1并设置erro。

每个进程组都有一个首领进程,其 PGID 和 PID 相同。进程组将一直存在,直到其中所有进程都退出,或者加入到其他进程组。

会话

一些有关联的进程组将形成一个会话(session)。Linux并未提供所谓会话ID(SID)的概念,但是认为其等同于PGID,用如下函数来获取指定进程的 SID:

#include 
pid_t getsid( pid_t pid);

用ps查看进程间关系

执行ps命令可以查看进程、进程组和会话之间的关系:

ps -o pid,ppid,pgid,sid,comm | less

pid,ppid,pgid,sid进程间关系_第1张图片

我们是在 bash shell 下执行 ps 和 less 命令的,所以 ps 和 less 命的父进程是 bash 命令。这可以从PPID(父进程 PID)列看出。这3条命令创建了1个会话 (SID是1943)和2个进程组 (PGID分别是 1943 和 2298)。bash 命令的 PID、PGID 和SID 都相同,很明显它既是会话的首领,也是组 1943 的首领。ps 命令则是组 2298 的首领,因为其 PID 也是2298。下图描述了此三者的关系:

pid,ppid,pgid,sid进程间关系_第2张图片

你可能感兴趣的:(操作系统,c++)