《Linux 进程管理进阶:会话、进程组与守护进程的底层逻辑与实践》

**前引:**在 Linux 的世界里,进程并非孤立存在。当我们执行一条命令、启动一个服务时,这些进程会以会话(Session)为 "社交圈"、进程组(Process Group)为 "小团体" 的形式组织起来;而那些在后台默默运行、不受终端影响的守护进程(Daemon),更是 Linux 系统稳定运行的 "幕后英雄"!

目录

【一】会话

【二】前/后台进程

前台切后台进程:

查看后台进程:

后台切前台进程:

暂停后台进程:

继续运行后台进程:

【三】进程组与守护进程

(1)查看进程组

(2)守护进程

(3)守护进程原理

(4)如何创建守护进程


【一】会话

"会话"可理解为一个区域,通常一个用户登录就是一个会话,每个"会话"之前是并行的,即一个会话关闭不影响另外一个会话,在这个会话里面有许多的进程,例如:

用户登录打开的是解析OS命令的应用程序,处于OS与用户中间

注意:bash进程不是OS子进程,而是用来解析用户命令给OS的应用程序子进程

【二】前/后台进程

谁是前台/后台进程取决于谁拥有键盘,例如:键盘的Ctrl+C信号只对当前的前台进程有用

每个会话区只允许存在一个前台进程,其它只能为后台进程,那么如何互相切换?

前台切后台进程:

在命令末尾加 &,进程会被丢到后台运行(例如:./Ceshi &)

例如:此时它变为了后台进程,是看不懂键盘输入的

查看后台进程:

执行指令 jobs ,即可查看后台进程,其中最前面的数字是作业编号(理解为后台进程编号)

例如:

后台切前台进程:

执行指令 用 fg %作业号 可以把后台作业拉到前台运行

例如:

暂停后台进程:

这里我们就采用19号信号来暂停后台进程(fg 作业号是切换到前程,我喜欢19号信号!)

继续运行后台进程:

执行指令 bg 作业号后台暂停的进程即可继续运行

【三】进程组与守护进程

(1)查看进程组

在上面我们提到了"会话",一个会话中会存在n个进程组:相关联的进程集合

注意:前台进程组是唯一的,但前台进程组并非只有一个进程,比如:ls -l | grep ".txt" | wc -l
进程组的创建者(第一个进程)就是该进程组的组长(组长进程的 PID 就是组员的PGID

组内所有进程都继承组长的 PGID,直到组长退出或进程被迁移到其他组

简单粗暴,可使用指令:ps -efj

  • -e: 显示系统内所有进程
  • -f: 显示完整的信息(包括 UID, PID, PPID, C, STIME, TTY, TIME, CMD)
  • -j: 显示与作业控制相关的信息(包括 PGID, SID)

参数含义:

字段 含义 与进程组的关系
UID 用户 ID 进程的所有者
PID 进程 ID 每个进程唯一的标识符
PPID 父进程 ID 创建该进程的进程 ID
PGID 进程组 ID 核心字段! 同一个进程组内的所有进程拥有相同的 PGID。通常,进程组的组长进程的 PID 等于 PGID
SID 会话 ID 进程所属会话的 ID。一个会话可以包含多个进程组
C CPU 使用率 进程使用的 CPU 百分比
STIME 启动时间 进程开始运行的时间
(2)守护进程

守护进程:守护进程是运行在后台的特殊进程,它独立于控制终端,不受用户登录或注销的影响,如何理解:我们的计算机桌面窗口可以理解为一个会话窗口,守护进程单独成一个会话窗口

(3)守护进程原理

主要原理:原进程A由父进程管理,而父进程主动退出,子进程A就变为了孤儿进程,父进程变为该会话的第一个进程,比如bash进程,再通过系统调用让A进程脱离这个终端/会话(不接受终端退出时的信号操作),成为守护进程(kill -9 -19这两个特殊的信号除外)

(4)如何创建守护进程

创建子进程,父进程主动退出:

复制代码
pid_t t =fork();
if(t>0)exit(0);
else
{
        
}

子进程单独成为会话:使子进程成为会话首进程,脱离原终端

cpp 复制代码
setsid();

忽略一定的信号:

cpp 复制代码
signal(SIGHUP, SIG_IGN);
signal(SIGSTOP,SIG_IGN);
.......

切换工作目录:

cpp 复制代码
chdir("/");

设置文件权限掩码为 0:确保创建的文件和目录拥有最大的权限

cpp 复制代码
umask(0);

可以将守护进程的日志信息打印到 /dev/null(垃圾站):

cpp 复制代码
const std::string ptr ="/dev/null";

int fd = open(ptr.c_str(),O_RDWR);
if(fd>0)
{
    dup2(fd,0);
    dup2(fd,1);
    dup2(fd,2);
}


请忽略以下信息(仅限凑分使用):

在 Linux 的世界里,进程并非孤立存在。当我们执行一条命令、启动一个服务时,这些进程会以会话(Session)为 "社交圈"、进程组(Process Group)为 "小团体" 的形式组织起来;而那些在后台默默运行、不受终端影响的守护进程(Daemon),更是 Linux 系统稳定运行的 "幕后英雄"!在 Linux 的世界里,进程并非孤立存在。当我们执行一条命令、启动一个服务时,这些进程会以会话(Session)为 "社交圈"、进程组(Process Group)为 "小团体" 的形式组织起来;而那些在后台默默运行、不受终端影响的守护进程(Daemon),更是 Linux 系统稳定运行的 "幕后英雄"!在 Linux 的世界里,进程并非孤立存在。当我们执行一条命令、启动一个服务时,这些进程会以会话(Session)为 "社交圈"、进程组(Process Group)为 "小团体" 的形式组织起来;而那些在后台默默运行、不受终端影响的守护进程(Daemon),更是 Linux 系统稳定运行的 "幕后英雄"!在 Linux 的世界里,进程并非孤立存在。当我们执行一条命令、启动一个服务时,这些进程会以会话(Session)为 "社交圈"、进程组(Process Group)为 "小团体" 的形式组织起来;而那些在后台默默运行、不受终端影响的守护进程(Daemon),更是 Linux 系统稳定运行的 "幕后英雄"!在 Linux 的世界里,进程并非孤立存在。当我们执行一条命令、启动一个服务时,这些进程会以会话(Session)为 "社交圈"、进程组(Process Group)为 "小团体" 的形式组织起来;而那些在后台默默运行、不受终端影响的守护进程(Daemon),更是 Linux 系统稳定运行的 "幕后英雄"!在 Linux 的世界里,进程并非孤立存在。当我们执行一条命令、启动一个服务时,这些进程会以会话(Session)为 "社交圈"、进程组(Process Group)为 "小团体" 的形式组织起来;而那些在后台默默运行、不受终端影响的守护进程(Daemon),更是 Linux 系统稳定运行的 "幕后英雄"!在 Linux 的世界里,进程并非孤立存在。当我们执行一条命令、启动一个服务时,这些进程会以会话(Session)为 "社交圈"、进程组(Process Group)为 "小团体" 的形式组织起来;而那些在后台默默运行、不受终端影响的守护进程(Daemon),更是 Linux 系统稳定运行的 "幕后英雄"!在 Linux 的世界里,进程并非孤立存在。当我们执行一条命令、启动一个服务时,这些进程会以会话(Session)为 "社交圈"、进程组(Process Group)为 "小团体" 的形式组织起来;而那些在后台默默运行、不受终端影响的守护进程(Daemon),更是 Linux 系统稳定运行的 "幕后英雄"!在 Linux 的世界里,进程并非孤立存在。当我们执行一条命令、启动一个服务时,这些进程会以会话(Session)为 "社交圈"、进程组(Process Group)为 "小团体" 的形式组织起来;而那些在后台默默运行、不受终端影响的守护进程(Daemon),更是 Linux 系统稳定运行的 "幕后英雄"!在 Linux 的世界里,进程并非孤立存在。当我们执行一条命令、启动一个服务时,这些进程会以会话(Session)为 "社交圈"、进程组(Process Group)为 "小团体" 的形式组织起来;而那些在后台默默运行、不受终端影响的守护进程(Daemon),更是 Linux 系统稳定运行的 "幕后英雄"!在 Linux 的世界里,进程并非孤立存在。当我们执行一条命令、启动一个服务时,这些进程会以会话(Session)为 "社交圈"、进程组(Process Group)为 "小团体" 的形式组织起来;而那些在后台默默运行、不受终端影响的守护进程(Daemon),更是 Linux 系统稳定运行的 "幕后英雄"!在 Linux 的世界里,进程并非孤立存在。当我们执行一条命令、启动一个服务时,这些进程会以会话(Session)为 "社交圈"、进程组(Process Group)为 "小团体" 的形式组织起来;而那些在后台默默运行、不受终端影响的守护进程(Daemon),更是 Linux 系统稳定运行的 "幕后英雄"!在 Linux 的世界里,进程并非孤立存在。当我们执行一条命令、启动一个服务时,这些进程会以会话(Session)为 "社交圈"、进程组(Process Group)为 "小团体" 的形式组织起来;而那些在后台默默运行、不受终端影响的守护进程(Daemon),更是 Linux 系统稳定运行的 "幕后英雄"!在 Linux 的世界里,进程并非孤立存在。当我们执行一条命令、启动一个服务时,这些进程会以会话(Session)为 "社交圈"、进程组(Process Group)为 "小团体" 的形式组织起来;而那些在后台默默运行、不受终端影响的守护进程(Daemon),更是 Linux 系统稳定运行的 "幕后英雄"!在 Linux 的世界里,进程并非孤立存在。当我们执行一条命令、启动一个服务时,这些进程会以会话(Session)为 "社交圈"、进程组(Process Group)为 "小团体" 的形式组织起来;而那些在后台默默运行、不受终端影响的守护进程(Daemon),更是 Linux 系统稳定运行的 "幕后英雄"!在 Linux 的世界里,进程并非孤立存在。当我们执行一条命令、启动一个服务时,这些进程会以会话(Session)为 "社交圈"、进程组(Process Group)为 "小团体" 的形式组织起来;而那些在后台默默运行、不受终端影响的守护进程(Daemon),更是 Linux 系统稳定运行的 "幕后英雄"!在 Linux 的世界里,进程并非孤立存在。当我们执行一条命令、启动一个服务时,这些进程会以会话(Session)为 "社交圈"、进程组(Process Group)为 "小团体" 的形式组织起来;而那些在后台默默运行、不受终端影响的守护进程(Daemon),更是 Linux 系统稳定运行的 "幕后英雄"!在 Linux 的世界里,进程并非孤立存在。当我们执行一条命令、启动一个服务时,这些进程会以会话(Session)为 "社交圈"、进程组(Process Group)为 "小团体" 的形式组织起来;而那些在后台默默运行、不受终端影响的守护进程(Daemon),更是 Linux 系统稳定运行的 "幕后英雄"!在 Linux 的世界里,进程并非孤立存在。当我们执行一条命令、启动一个服务时,这些进程会以会话(Session)为 "社交圈"、进程组(Process Group)为 "小团体" 的形式组织起来;而那些在后台默默运行、不受终端影响的守护进程(Daemon),更是 Linux 系统稳定运行的 "幕后英雄"!在 Linux 的世界里,进程并非孤立存在。当我们执行一条命令、启动一个服务时,这些进程会以会话(Session)为 "社交圈"、进程组(Process Group)为 "小团体" 的形式组织起来;而那些在后台默默运行、不受终端影响的守护进程(Daemon),更是 Linux 系统稳定运行的 "幕后英雄"!在 Linux 的世界里,进程并非孤立存在。当我们执行一条命令、启动一个服务时,这些进程会以会话(Session)为 "社交圈"、进程组(Process Group)为 "小团体" 的形式组织起来;而那些在后台默默运行、不受终端影响的守护进程(Daemon),更是 Linux 系统稳定运行的 "幕后英雄"!在 Linux 的世界里,进程并非孤立存在。当我们执行一条命令、启动一个服务时,这些进程会以会话(Session)为 "社交圈"、进程组(Process Group)为 "小团体" 的形式组织起来;而那些在后台默默运行、不受终端影响的守护进程(Daemon),更是 Linux 系统稳定运行的 "幕后英雄"!在 Linux 的世界里,进程并非孤立存在。当我们执行一条命令、启动一个服务时,这些进程会以会话(Session)为 "社交圈"、进程组(Process Group)为 "小团体" 的形式组织起来;而那些在后台默默运行、不受终端影响的守护进程(Daemon),更是 Linux 系统稳定运行的 "幕后英雄"!

相关推荐
切糕师学AI几秒前
ARM 中的 SVC 监管调用(Supervisor Call)
linux·c语言·汇编·arm开发
陌上花开缓缓归以3 分钟前
linux jiffies 初始化不为0问题分析
linux·arm开发
霖霖总总7 分钟前
[小技巧39]Linux 文件与命令查找工具(which、whereis、locate、find)全面解析
linux·运维
xlq2232210 分钟前
6.Linux权限
linux
ayaya_mana22 分钟前
在 CentOS 7/RHEL 7 上安装并切换至新版内核
linux·运维·centos
康康的AI博客28 分钟前
工业数据中台:PLC、SCADA、MES的实时协同架构
java·服务器·网络
三不原则39 分钟前
故障案例:数据库慢查询导致交易延迟,AIOps 如何自动定位?
运维·数据库
gzxx2007sddx43 分钟前
ubuntu挂载访问windows的共享文件夹
linux·运维·ubuntu·挂载·共享
市安1 小时前
基于 LVS+Keepalived+NFS 的高可用 Web 集群构建与验证
运维·服务器·网络·lvs·keepalived·ipvsadm
AC赳赳老秦1 小时前
Dify工作流+DeepSeek:运维自动化闭环(数据采集→报告生成)
android·大数据·运维·数据库·人工智能·golang·deepseek