c - 如何获取与终端关联的 session 的 session ID?

标签 c linux terminal posix process-group

在Linux中,每个终端只关联一个 session (一个 session 有一个或多个进程组,一个进程组有一个或多个进程)。

是否有一些函数(或命令)接受 tty 设备文件(例如:/dev/tty1/dev/pts/0)并返回与此 tty/终端关联的 session ID?

最佳答案

执行以下步骤:

  1. stat 您要检查的 TTY。特别是找出它正在使用的主要/次要设备 ID。使用公式 major*256+minor 将它们组合成一个数字(或者只从 stat 中获取原始数字)

  2. 打开/proc/,扫描所有名字只有数字的目录。该目录的名称是系统中进程的pid

  3. 对于每个这样的目录,打开/proc/pid/stat,并将文件解析为由空格分隔的字段(第二个字段除外,它有括号)。第 7 个字段将是 TTY 设备的主要/次要。扫描直到找到与您正在寻找的 TTY 匹配的电话。

  4. 该文件中的第 6 个字段是进程的 sid(您要查找的编号)。第 8 个字段是 TTY 的 pgrp

文件结构详解here .

关于c - 如何获取与终端关联的 session 的 session ID?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47227764/

相关文章:

c - 当进程 fork 时,共享库 .so 是否仍在地址空间中?构造函数会再次执行吗?

C - msgrcv 在收到的消息中添加字符,很奇怪

c - 格式化 C 字符串

node.js - 安装后运行 karma 导致 'karma' 不被识别为内部或外部命令

c - 为什么这个数组大小 "workaround"给我一个警告?

linux - 如何让我的菜单在准备接受用户输入时发出蜂鸣声/铃声 (UNIX)

linux - 请告诉我 cd bin 和 cd $bin 有什么区别?

Linux:删除多个文件的文件扩展名

android - React Native 的项目结构包括原生 iOS,Android?

ubuntu - 将终端输出到多列。