ThinkChat2.0新版上线,更智能更精彩,支持会话、画图、视频、阅读、搜索等,送10W Token,即刻开启你的AI之旅 广告
[TOC] # 会话概念 会话是一个或多个进程组的集合。 * 一个会话可以有一个控制终端。这通常是终端设备或伪终端设备; * 建立与控制终端连接的会话首进程被称为控制进程; * 一个会话中的几个进程组可被分为一个前台进程组以及一个或多个后台进程组; * 如果一个会话有一个控制终端,则它有一个前台进程组,其它进程组为后台进程组; * 如果终端接口检测到断开连接,则将挂断信号发送至控制进程(会话首进程)。 ![](https://img.kancloud.cn/63/ee/63eec264de394a0cef92a2b7881fd0de_791x371.png) # 创建会话注意事项 1. 调用进程不能是进程组组长,该进程变成新会话首进程(session header) 2. 该调用进程是组长进程,则出错返回 3. 该进程成为一个新进程组的组长进程 4. 需有root权限(ubuntu不需要) 5. 新会话丢弃原有的控制终端,该会话没有控制终端 6. 建立新会话时,先调用fork, 父进程终止,子进程调用setsid # API函数介绍 **getsid函数:** ~~~ #include <unistd.h> ​ pid_t getsid(pid_t pid); 功能:获取进程所属的会话ID 参数: pid:进程号,pid为0表示查看当前进程session ID 返回值: 成功:返回调用进程的会话ID 失败:-1 ~~~ 组长进程不能成为新会话首进程,新会话首进程必定会成为组长进程。 **setsid函数:** ~~~ #include <unistd.h> ​ pid_t setsid(void); 功能: 创建一个会话,并以自己的ID设置进程组ID,同时也是新会话的ID。调用了setsid函数的进程,既是新的会长,也是新的组长。 参数:无 返回值: 成功:返回调用进程的会话ID 失败:-1 ~~~