进程组与会话组

简介: 进程组与会话组

Linux 系统中,进程是以的形式(进程之间的层次关系)进行管理的,如进程组会话组,进程组是一组相关进程的集合,会话组是一组相关进程组或进程的集合。


进程组ID 的类型与 进程ID 一样。一个进程组有一个进程组首进程,也可称之为该进程组的组长其进程ID为该进程组的ID。一个会话组有一个会话组首进程,也可称之为会话组组长其进程ID为该会话组的ID,进程的会话成员关系是由会话组IDSID )确定的。


下图为会话组、进程组与进程的关系。其中PID为进程ID,PPID为父进程(该进程的父亲进程)的ID,PGID(Process Group ID)为进程组ID,SID(Session ID)为会话组ID。

微信截图_20221209151158.png


上图中会话组的ID为 400 ,会话组中存在三个进程组,组ID分别为 400658660 。其中进程组ID为 400 的组中只有一个进程,该进程的ID为 400 。由此可以很明显地看出,进程号为 400 的进程即是进程组的组长,同样也是会话组的组长。进程号为 400 的进程同时也是整个会话组中其他进程的父进程进程与父进程不一定在同一进程组


进程组

每个进程都有一个用数字表示的进程组ID,表示该进程所属的进程组。获取一个进程组的ID可以通过 getpgrp() 函数与 getpgid() 函数获得一个进程的进程组ID。

#include <unistd.h>
pid_t getpgid(pid_t pid);
pid_t getpgrp(void);          /* POSIX.1 version */
pid_t getpgrp(pid_t pid);     /* BSD version */点击复制复制失败已复制


其中, getpgid() 函数返回进程号为参数 pid 的进程所属的进程组ID,如果参数 pid0 ,则返回调用进程所属的进程组ID。 getpgrp() 函数有两个版本:其中 POSIX 标准的 getpgrp() 函数用于返回调用进程所属的进程组ID, BSD 版本的 getpgrp() 函数则返回进程号为参数pid的进程所属的进程组ID。


下面三个函数可以用来设置修改)进程组ID。

#include <unistd.h>
int setpgid(pid_t pid, pid_t pgid);
int setpgrp(void);                    /* System V version */
int setpgrp(pid_t pid, pid_t pgid);   /* BSD version */点击复制复制失败已复制


其中, setpgid() 函数将进程号为参数pid的进程所属的进程组ID修改为参数 pgid 所表示的值。如果 pid 的值设置为 0 ,那么调用进程的进程组ID就会被修改。如果 pgid 的值设置为 0 ,那么进程号为 pid 的进程所属的进程组的ID会被设置成 pid (进程号为参数 pid 的进程成为组长)。


System V 版本的 setpgrp() 函数用于修改调用进程所属进程组的ID为调用进程的ID(调用进程成为组长); BSD 版本的 setgprp() 函数与 setgid() 函数功能一致。


会话组

会话组是一组进程组或进程的集合getsid() 函数用于获得进程号为参数 pid 的进程所属的会话组的组ID。如果参数 pid0 ,则返回调用进程所属的会话组ID。

#include <unistd.h>
pid_t getsid(pid_t pid);点击复制复制失败已复制


使用 setsid() 函数会创建一个新会话,其前提调用进程不能是进程组组长

#include <unistd.h>
pid_t setsid(void);点击复制复制失败已复制


调用该函数成功后,该调用进程成为新的会话组的组长,在会话组中创建新的进程组并担任组长,同时脱离终端的控制,运行在后台。该进程成为新会话组和进程组中唯一的进程。

目录
相关文章
|
机器学习/深度学习 并行计算 PyTorch
PyTorch安装教程
PyTorch是学习深度学习时常用的Python神经网络框架,本文将介绍其部分版本的安装方式。Windows和Linux通用。 作者使用anaconda作为管理虚拟环境的工具。以下工作都在虚拟环境中进行,对Python和Aanaconda的安装及对虚拟环境的管理本文不作赘述,后期可能会撰写相关的博文。
PyTorch安装教程
|
开发工具
成功解决 zsh: command not found
成功解决 zsh: command not found
3458 0
|
Java API 数据库
基于 SOA 的组件化业务基础平台
原文:基于 SOA 的组件化业务基础平台 前言 业务基础平台是业务逻辑应用和基础架构平台之间的一个中间层,解决 “应用软件的业务描述和操作系统平台、软件基础架构平台之间的交互与管理问题”。
2204 0
|
11月前
|
存储 监控 Devops
DevOps实践:持续集成/持续部署(CI/CD)的实战指南
DevOps实践:持续集成/持续部署(CI/CD)的实战指南
|
Prometheus 运维 监控
解锁分布式云多集群统一监控的云上最佳实践
为应对分布式云多集群监控的挑战,阿里云可观测监控 Prometheus 版结合 ACK One,凭借高效纳管与全局监控方案有效破解了用户在该场景的监控运维痛点,为日益增长的业务需求提供了一站式、高效、统一的监控解决方案,实现成本与运维效率的双重优化。助力企业的数字化转型与业务快速增长,在复杂多变的云原生时代中航行,提供了一个强有力的罗盘与风帆。
56424 129
|
12月前
|
SQL 存储 安全
深入浅出:SQL数据库建表全过程详解
数据库是现代信息系统的核心组成部分,而SQL(结构化查询语言)则是管理和操作数据库的最主要工具之一。在创建数据库的过程中,建表是非常重要的一步,因为它决定了数据的存储结构和方式。本文将详细介绍SQL数据库建表的全过程,帮助读者更好地理解并掌握这一关键技术。一、了解数据库与表的基本概念在深入SQL数据
535 1
|
12月前
|
SQL 关系型数据库 MySQL
如何确认SQL用了索引:详细技巧与方法
在数据库管理中,索引是提高SQL查询性能的重要手段
2019 5
|
存储 Linux C语言
Linux|如何安装和运行多个 glibc 库
Linux|如何安装和运行多个 glibc 库
3431 5
|
网络协议 Unix Go
Go unix domain socket通信
Go unix domain socket通信
|
并行计算 算法 安全
Java的虚拟线程到底是什么?解决了什么痛点?
Java的虚拟线程到底是什么?解决了什么痛点?
1743 1