如何获取与终端关联的会话的会话ID?

时间:2017-11-10 16:59:38

标签: c linux terminal posix process-group

在Linux中,每个终端只与一个会话相关联(会话具有一个或多个进程组,进程组具有一个或多个进程)。

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

1 个答案:

答案 0 :(得分:0)

执行以下步骤:

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

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

  3. 对于每个此类目录,打开/proc/pid/stat,并将文件解析为由空格分隔的字段(第二个字段除外,其中包含括号)。第7个字段将是TTY设备的主要/次要。扫描,直到找到与您正在查找的TTY相匹配的那个。

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

  5. 详细文件结构here