会话session概念解析 发布时间:2026/8/6 21:16:16 会话session概念解析要理解“会话”Session我们得把它放在 Linux/Unix 的进程管理树里看。会话Session是一个或多个“进程组”Process Group的集合它是作业控制Job Control的基本单元。为了帮你彻底搞懂我们把进程的层级关系从下到上捋一遍1. 进程的“三层层级结构”进程Process最底层的执行单元。进程组Process Group一群相关进程的集合比如grep命令加上它的管道兄弟。进程组里有一个组长进程PGID PID。会话Session一个或多个进程组的集合。会话里有一个会长进程SID PID。2. 会话Session最核心的三个特性一个会话之所以重要是因为它捆绑了“终端”和“作业控制”拥有一个控制终端Controlling Terminal绝大多数会话都关联着一个终端如 SSH 窗口、物理串口。当你在终端敲命令时输入和输出都是通过这个会话传递的。前台与后台Foreground / Background会话里的进程组被分为两类。前台进程组能接收键盘信号如CtrlC和多个后台进程组默默运行。信号传导当控制终端断开比如 SSH 断了内核会向该会话中的所有进程发送SIGHUP信号默认会让它们全部退出。3.setsid()到底干了什么当你调用setsid()时系统会创建一个全新的、独立的会话。它做了三件“斩断联系”的事该进程变成新会话的“会长”SID 该进程PID。该进程变成新会话里第一个进程组前台组的“组长”。最关键剥离控制终端。如果该进程之前有父进程传下来的终端它会彻底断开变成无终端No Controlling TTY的孤儿会话。4. 为什么要用setsid()——典型的“守护进程Daemon”套路最经典的场景就是创建守护进程如 Nginx、MySQL 后台服务。如果不调用setsid()你的进程隶属于 SSH 会话。一旦你关掉窗口SSH 会话结束系统发来SIGHUP你的服务就被杀死了。调用setsid()后进程自成一派新会话和原来的终端窗口彻底“离婚”。即使你退出登录这个新会话依然存活不受终端关闭影响从而常驻后台。5. 直观的类比生活化理解你可以把进程层级想象成一个“公司”进程 单个员工做具体任务。进程组项目组组长带着组员一起干活比如前端组。会话Session整个公司。setsid()的作用就是你带着手下集体辞职重新注册一家新公司新会话并且把原来的办公大楼控制终端的钥匙交回去。从此原来的大楼拆不拆SSH断不断都跟你这家新公司毫无关系了。特别注意调用限制setsid()不能由进程组组长调用否则会报错EPERM。所以标准的守护进程写法是先fork()一个子进程让父进程退出让子进程变成孤儿然后子进程调用setsid()因为子进程肯定不是进程组组长。如果你是在写脚本常用的nohup命令本质上也是通过剥离SIGHUP信号并配合setsid()类似机制来达到后台驻留效果的。setsid函数详解setsid()是 Linux 系统中一个关键的系统调用它的核心作用是创建一个全新的会话Session并使调用进程成为这个新会话的领导者Session Leader。以下是关于setsid()函数的详细解读。 函数原型#include unistd.h pid_t setsid(void);头文件:unistd.h返回值: 成功时返回新会话的ID也就是调用进程的PID失败时返回(pid_t)-1并设置全局变量errno以指示错误。⚙️ 核心功能与原理调用setsid()会触发一系列连锁反应其核心动作包括创建新会话 (New Session)调用进程成为新会话的领导者Session Leader。新会话的ID (SID) 被设置为调用进程的PID。创建新进程组 (New Process Group)调用进程同时成为新进程组的组长Group Leader。新进程组的ID (PGID) 也被设置为调用进程的PID。脱离控制终端 (No Controlling Terminal)新创建的会话最初没有控制终端。这使进程彻底与原来的终端“断绝关系”是守护进程不受终端关闭影响的关键-。调用成功后调用进程是其新会话和新进程组中的唯一成员。⚠️ 使用限制与错误setsid()最重要的限制是调用进程不能是进程组的组长Process Group Leader。如果违反此规则调用将失败并返回-1同时errno被设置为EPERM(操作不允许)。为什么有这个限制这是为了防止进程组组长“独自”加入新会话而把同组的其他进程“遗留”在原会话中从而破坏“会话 - 进程组 - 进程”这种清晰的两层树形结构。 典型应用场景创建守护进程 (Daemon)setsid()最经典的用途是创建守护进程即那些在后台长期运行、不受用户登录和注销影响的服务程序如 Web 服务器、数据库等。一个标准的创建守护进程的步骤通常如下fork()创建子进程父进程退出 (exit())这步让子进程变成孤儿进程并确保子进程不是一个进程组的组长为安全调用setsid()做准备。子进程调用setsid()子进程至此成为一个全新会话的领导者完全独立出来-。可选更改工作目录 (chdir(/))将工作目录改为根目录避免占用其他文件系统导致无法卸载-。可选重设文件权限掩码 (umask(0))给予守护进程更大的文件创建权限控制。可选关闭不必要的文件描述符释放从父进程继承来的标准输入、输出、错误等资源。代码示例 (C语言)下面是一个创建守护进程的最小化代码框架#include unistd.h #include stdlib.h #include stdio.h int main() { pid_t pid; // 1. fork() 创建子进程 pid fork(); if (pid 0) { perror(fork); exit(EXIT_FAILURE); } // 父进程退出 if (pid 0) { exit(EXIT_SUCCESS); } // 2. 子进程调用 setsid()成为新会话的领导者 if (setsid() 0) { perror(setsid); exit(EXIT_FAILURE); } // 3. 可选更改工作目录至根目录 if (chdir(/) 0) { perror(chdir); exit(EXIT_FAILURE); } // 4. 可选重设文件权限掩码 umask(0); // 5. 可选关闭标准输入、输出、错误 close(STDIN_FILENO); close(STDOUT_FILENO); close(STDERR_FILENO); // 6. 在这里编写守护进程的核心工作逻辑 while (1) { // 守护进程持续运行的任务... sleep(30); } exit(EXIT_SUCCESS); } 其他注意事项继承性通过fork()创建的子进程会继承父进程的会话ID。而通过exec()系列函数执行的程序其会话ID会被保留。SIGHUP信号当会话领导进程终止时内核会向该控制终端的前台进程组中的所有进程发送SIGHUP信号。相关函数getsid()用于获取进程的会话IDsetpgid()用于设置进程组ID。 总结setsid()是 Linux 进程管理中一个精准而强大的工具。它通过让进程“自立门户”创建新会话和新进程组并“切断联系”脱离控制终端实现了进程的完全独立。这正是所有守护进程能够稳定、持久地在后台运行的基础。setsid命令详解setsid本身就是一个Linux终端命令。它和setsid()函数功能一致用于在一个新的会话Session中运行指定的程序。这个命令通常已预装在大多数Linux发行版中。基本用法与选项命令的基本格式是setsid [选项] 程序 [程序参数]。一些常用的选项包括选项说明-f,--fork强制创建子进程。如果当前进程已经是会话组长setsid会失败此选项可强制其通过fork创建子进程来执行任务。-w,--wait等待程序结束。使setsid命令等待所运行的程序退出并返回该程序的退出状态码。-c,--ctty使用当前终端。让新会话将当前的终端作为控制终端。常见用法举例1. 在新会话中运行程序最基本用法# 让 my_script.sh 在一个全新的、没有控制终端的会话中运行 setsid my_script.sh执行后my_script.sh会立即与当前终端脱离。2. 结合输出重定向实现“永久后台”运行这是最常用的方式可以完全忽略终端输出避免干扰# 将标准输出和错误输出都丢弃 setsid my_long_task.sh /dev/null 21这样即使你关闭终端my_long_task.sh也会在后台持续运行。3. 等待程序执行完毕如果你需要在一个脚本中等待setsid启动的任务完成后再继续可以使用-w选项# 等待 data_process 程序结束并获取其退出码 setsid -w data_process --inputdata.txt if [ $? -eq 0 ]; then echo 数据处理成功 fi与setsid()函数的关系终端命令setsid本质上就是C语言库函数setsid()的一个便捷封装。它让你无需编写和编译C代码就能在Shell环境中直接获得“创建新会话”的能力-。常见应用场景与注意替代nohup与nohup类似setsid也能让进程无视SIGHUP信号在终端关闭后继续运行-。但setsid更“彻底”它直接创建了一个全新的会话而nohup只是让进程忽略挂断信号。创建守护进程它是创建守护进程Daemon的经典方法之一。注意setsid命令属于util-linux软件包。如果你的系统提示找不到该命令可以通过包管理器安装例如在Debian/Ubuntu上使用sudo apt install util-linux。 相关新闻 MySQL事务日志系统:undo log、redo log与bin log深度解析 1. 事务日志系统核心架构解析在数据库系统中,事务的ACID特性离不开三大日志文件的协同工作。作为从业15年的数据库内核开发者,我见证过太多因日志配置不当导致的生产事故。今天我们就深入剖析undo log、redo log和bin log的运作机制,以及它们… 2026/8/6 21:16:16 Daft开发者指南:贡献代码与扩展功能的最佳实践 Daft开发者指南:贡献代码与扩展功能的最佳实践 【免费下载链接】daft Render probabilistic graphical models using matplotlib 项目地址: https://gitcode.com/gh_mirrors/daft1/daft Daft是一个使用matplotlib渲染概率图模型(PGM)的… 2026/8/6 21:16:16 Growler高级特性:探索协程中间件与异步模板渲染 Growler高级特性:探索协程中间件与异步模板渲染 【免费下载链接】Growler A micro web-framework using asyncio coroutines and chained middleware. 项目地址: https://gitcode.com/gh_mirrors/gr/Growler Growler是一个基于asyncio协程和链式中间件的微型… 2026/8/6 21:16:16 最新新闻 ADR与机器学习:智能威胁检测模型训练的完整指南 ADR与机器学习:智能威胁检测模型训练的完整指南 【免费下载链接】ADR ADR secures enterprise AI agents through observability, security benchmarking, and threat detection. Deployed at Uber. 项目地址: https://gitcode.com/GitHub_Trending/adr10/ADR … 2026/8/6 22:16:18 YoloDotNet高级应用:自定义可视化与结果后处理技巧 YoloDotNet高级应用:自定义可视化与结果后处理技巧 【免费下载链接】YoloDotNet YoloDotNet - A C# .NET 8.0 project for Classification, Object Detection, OBB Detection, Segmentation and Pose Estimation in both images and live video streams. 项目地址… 2026/8/6 22:16:18 毕设分享 基于大数据人才岗位数据分析 文章目录 1 前言1. 数据集说明2. 数据处理2.1 数据清洗2.2 数据导入 3. 数据分析可视化3.1 整体情况(招聘企业数、岗位数、招聘人数、平均工资)3.2 企业主题行业情况公司类型最缺人的公司 TOP平均薪资最高的公司 TOP工作时间工作地点福利词云 3.3 岗位主… 2026/8/6 22:16:18 OpenNews MCP实时订阅功能详解:不错过任何市场动态 OpenNews MCP实时订阅功能详解:不错过任何市场动态 【免费下载链接】opennews-mcp News Aggregation AI Ratings Trading Signals Real-time Updates 项目地址: https://gitcode.com/gh_mirrors/op/opennews-mcp OpenNews MCP是一款强大的新闻聚合平台&am… 2026/8/6 22:16:18 HarmonyOS 应用开发《掌上英语》第99篇:使用AVPlayer设置播放URL(ArkTS) 使用AVPlayer设置播放URL(ArkTS) 本开发指导将介绍如何使用AVPlayer开发播放功能,在不同的场景下如何设置URL。 当前指导仅介绍播放URL设置方法,其他场景及完整示例代码,请参考视频播放。 当前开发指导将提供以下设置播放URL的方法… 2026/8/6 22:16:18 暗黑破坏神2存档编辑完全指南:5分钟掌握d2s-editor网页版 暗黑破坏神2存档编辑完全指南:5分钟掌握d2s-editor网页版 【免费下载链接】d2s-editor 项目地址: https://gitcode.com/gh_mirrors/d2/d2s-editor 还在为暗黑破坏神2的角色培养而烦恼吗?想要快速调整角色属性、获取稀有装备却找不到合适工具&… 2026/8/6 22:11:18 日新闻 深入解析LimboAI C++内核:架构设计与性能优化实战 1. 项目概述:为什么我们需要深入LimboAI的C内核?如果你是一名使用Godot引擎的游戏开发者,尤其是对AI行为逻辑有较高要求的项目,那么LimboAI这个名字你大概率不会陌生。它作为Godot 4生态中一个备受瞩目的行为树与状态机插件&#… 2026/8/6 0:00:05 Unity 2D游戏敌人AI系统:基于PlayMaker状态机与2D Toolkit的实战开发 1. 项目概述与核心思路大家好,我是老张,一个在游戏开发一线摸爬滚打了十多年的老码农。今天咱们接着聊《空洞骑士》风格2D动作游戏的Demo制作。上一期我们搭好了基础框架,处理了角色移动和碰撞,这一期,我们要让游戏世界… 2026/8/6 0:00:05 被动防火门市场前景发展趋势 被动防火门依靠材质结构、密闭构造阻隔烟火蔓延,无需电控启动,是建筑被动消防系统核心构件,行业依托新规管控、城市更新、工业安全升级迎来稳定扩容,整体朝着合规化、专项化、低碳化、智能化方向发展。现阶段 GB12955‑2024 新版国… 2026/8/6 0:00:05 周新闻 ncmdumpGUI:一键解锁网易云音乐ncm文件的终极解决方案 ncmdumpGUI:一键解锁网易云音乐ncm文件的终极解决方案 【免费下载链接】ncmdumpGUI C#版本网易云音乐ncm文件格式转换,Windows图形界面版本 项目地址: https://gitcode.com/gh_mirrors/nc/ncmdumpGUI 你是否曾经从网易云音乐下载了心爱的歌曲&am… 2026/8/6 10:11:44 分布式配置中心选型实战:Nacos与Consul在创业场景下的对比 分布式配置中心选型实战:Nacos与Consul在创业场景下的对比工程导读:本文深入讨论 分布式配置中心选型实战:Nacos与Consul在创业场景下的对比 在生产工程实践中的核心落地方案。基于 分布式架构与微服务设计 视角,剖析实际痛点、架… 2026/8/5 7:15:00 MoneyPrinterPlus实战指南:AI视频批量生成与自动化发布完整解决方案 MoneyPrinterPlus实战指南:AI视频批量生成与自动化发布完整解决方案 【免费下载链接】MoneyPrinterPlus AI一键批量生成各类短视频,自动批量混剪短视频,自动把视频发布到抖音,快手,小红书,视频号上,赚钱从来没有这么容易过! 支持本地语音模型chatTTS,fasterwhisper,… 2026/8/5 6:23:51 月新闻 【YOLOv11模型改进系列】08 数据增强的终极形态:用AutoAugment让YOLOv11自己学会“什么数据最有用” 08 数据增强的终极形态:用AutoAugment让YOLOv11自己学会“什么数据最有用” 老伙计,咖啡准备好了吗?上篇我们聊了Mosaic+MixUp的“混乱美学”,你肯定已经体会到,手动调数据增强策略就像给模型当保姆——每换一个数据集就要重新试一遍参数。 上周有个做工业质检的朋友找我… 2026/8/5 7:15:27 AI 智能电动窗帘电机高集成、低功耗 MOSFET 精准选型方案 随着 AIoT 与智能家居深度融合,智能电动窗帘电机对功率 MOSFET 提出新要求:微型化、高效率、逻辑电平驱动及静音运行。微碧半导体(VBsemi)基于先进的 Trench 和 SGT 工艺,为您提供覆盖 H桥驱动、电源管理及电机控制的完… 2026/8/4 8:25:47 AI 智能电动窗帘电机智能功率 MOSFET 完整选型方案 随着 AI 技术在智能家居中的普及(如语音控制、光线感应、场景联动),电动窗帘电机对功率 MOSFET 提出更高要求:高效率、低噪音、高集成度。微碧半导体(VBsemi)基于 SGT 及 Trench 工艺,为您提供覆… 2026/8/6 6:12:06
MySQL事务日志系统:undo log、redo log与bin log深度解析 1. 事务日志系统核心架构解析在数据库系统中,事务的ACID特性离不开三大日志文件的协同工作。作为从业15年的数据库内核开发者,我见证过太多因日志配置不当导致的生产事故。今天我们就深入剖析undo log、redo log和bin log的运作机制,以及它们… 2026/8/6 21:16:16
Daft开发者指南:贡献代码与扩展功能的最佳实践 Daft开发者指南:贡献代码与扩展功能的最佳实践 【免费下载链接】daft Render probabilistic graphical models using matplotlib 项目地址: https://gitcode.com/gh_mirrors/daft1/daft Daft是一个使用matplotlib渲染概率图模型(PGM)的… 2026/8/6 21:16:16
Growler高级特性:探索协程中间件与异步模板渲染 Growler高级特性:探索协程中间件与异步模板渲染 【免费下载链接】Growler A micro web-framework using asyncio coroutines and chained middleware. 项目地址: https://gitcode.com/gh_mirrors/gr/Growler Growler是一个基于asyncio协程和链式中间件的微型… 2026/8/6 21:16:16
ADR与机器学习:智能威胁检测模型训练的完整指南 ADR与机器学习:智能威胁检测模型训练的完整指南 【免费下载链接】ADR ADR secures enterprise AI agents through observability, security benchmarking, and threat detection. Deployed at Uber. 项目地址: https://gitcode.com/GitHub_Trending/adr10/ADR … 2026/8/6 22:16:18
YoloDotNet高级应用:自定义可视化与结果后处理技巧 YoloDotNet高级应用:自定义可视化与结果后处理技巧 【免费下载链接】YoloDotNet YoloDotNet - A C# .NET 8.0 project for Classification, Object Detection, OBB Detection, Segmentation and Pose Estimation in both images and live video streams. 项目地址… 2026/8/6 22:16:18
毕设分享 基于大数据人才岗位数据分析 文章目录 1 前言1. 数据集说明2. 数据处理2.1 数据清洗2.2 数据导入 3. 数据分析可视化3.1 整体情况(招聘企业数、岗位数、招聘人数、平均工资)3.2 企业主题行业情况公司类型最缺人的公司 TOP平均薪资最高的公司 TOP工作时间工作地点福利词云 3.3 岗位主… 2026/8/6 22:16:18
OpenNews MCP实时订阅功能详解:不错过任何市场动态 OpenNews MCP实时订阅功能详解:不错过任何市场动态 【免费下载链接】opennews-mcp News Aggregation AI Ratings Trading Signals Real-time Updates 项目地址: https://gitcode.com/gh_mirrors/op/opennews-mcp OpenNews MCP是一款强大的新闻聚合平台&am… 2026/8/6 22:16:18
HarmonyOS 应用开发《掌上英语》第99篇:使用AVPlayer设置播放URL(ArkTS) 使用AVPlayer设置播放URL(ArkTS) 本开发指导将介绍如何使用AVPlayer开发播放功能,在不同的场景下如何设置URL。 当前指导仅介绍播放URL设置方法,其他场景及完整示例代码,请参考视频播放。 当前开发指导将提供以下设置播放URL的方法… 2026/8/6 22:16:18
暗黑破坏神2存档编辑完全指南:5分钟掌握d2s-editor网页版 暗黑破坏神2存档编辑完全指南:5分钟掌握d2s-editor网页版 【免费下载链接】d2s-editor 项目地址: https://gitcode.com/gh_mirrors/d2/d2s-editor 还在为暗黑破坏神2的角色培养而烦恼吗?想要快速调整角色属性、获取稀有装备却找不到合适工具&… 2026/8/6 22:11:18
深入解析LimboAI C++内核:架构设计与性能优化实战 1. 项目概述:为什么我们需要深入LimboAI的C内核?如果你是一名使用Godot引擎的游戏开发者,尤其是对AI行为逻辑有较高要求的项目,那么LimboAI这个名字你大概率不会陌生。它作为Godot 4生态中一个备受瞩目的行为树与状态机插件&#… 2026/8/6 0:00:05
Unity 2D游戏敌人AI系统:基于PlayMaker状态机与2D Toolkit的实战开发 1. 项目概述与核心思路大家好,我是老张,一个在游戏开发一线摸爬滚打了十多年的老码农。今天咱们接着聊《空洞骑士》风格2D动作游戏的Demo制作。上一期我们搭好了基础框架,处理了角色移动和碰撞,这一期,我们要让游戏世界… 2026/8/6 0:00:05
被动防火门市场前景发展趋势 被动防火门依靠材质结构、密闭构造阻隔烟火蔓延,无需电控启动,是建筑被动消防系统核心构件,行业依托新规管控、城市更新、工业安全升级迎来稳定扩容,整体朝着合规化、专项化、低碳化、智能化方向发展。现阶段 GB12955‑2024 新版国… 2026/8/6 0:00:05
ncmdumpGUI:一键解锁网易云音乐ncm文件的终极解决方案 ncmdumpGUI:一键解锁网易云音乐ncm文件的终极解决方案 【免费下载链接】ncmdumpGUI C#版本网易云音乐ncm文件格式转换,Windows图形界面版本 项目地址: https://gitcode.com/gh_mirrors/nc/ncmdumpGUI 你是否曾经从网易云音乐下载了心爱的歌曲&am… 2026/8/6 10:11:44
分布式配置中心选型实战:Nacos与Consul在创业场景下的对比 分布式配置中心选型实战:Nacos与Consul在创业场景下的对比工程导读:本文深入讨论 分布式配置中心选型实战:Nacos与Consul在创业场景下的对比 在生产工程实践中的核心落地方案。基于 分布式架构与微服务设计 视角,剖析实际痛点、架… 2026/8/5 7:15:00
MoneyPrinterPlus实战指南:AI视频批量生成与自动化发布完整解决方案 MoneyPrinterPlus实战指南:AI视频批量生成与自动化发布完整解决方案 【免费下载链接】MoneyPrinterPlus AI一键批量生成各类短视频,自动批量混剪短视频,自动把视频发布到抖音,快手,小红书,视频号上,赚钱从来没有这么容易过! 支持本地语音模型chatTTS,fasterwhisper,… 2026/8/5 6:23:51
【YOLOv11模型改进系列】08 数据增强的终极形态:用AutoAugment让YOLOv11自己学会“什么数据最有用” 08 数据增强的终极形态:用AutoAugment让YOLOv11自己学会“什么数据最有用” 老伙计,咖啡准备好了吗?上篇我们聊了Mosaic+MixUp的“混乱美学”,你肯定已经体会到,手动调数据增强策略就像给模型当保姆——每换一个数据集就要重新试一遍参数。 上周有个做工业质检的朋友找我… 2026/8/5 7:15:27
AI 智能电动窗帘电机高集成、低功耗 MOSFET 精准选型方案 随着 AIoT 与智能家居深度融合,智能电动窗帘电机对功率 MOSFET 提出新要求:微型化、高效率、逻辑电平驱动及静音运行。微碧半导体(VBsemi)基于先进的 Trench 和 SGT 工艺,为您提供覆盖 H桥驱动、电源管理及电机控制的完… 2026/8/4 8:25:47
AI 智能电动窗帘电机智能功率 MOSFET 完整选型方案 随着 AI 技术在智能家居中的普及(如语音控制、光线感应、场景联动),电动窗帘电机对功率 MOSFET 提出更高要求:高效率、低噪音、高集成度。微碧半导体(VBsemi)基于 SGT 及 Trench 工艺,为您提供覆… 2026/8/6 6:12:06