C语言 如何获取终端关联会话的会话ID?

9rygscc1  于 2023-05-16  发布在  其他
关注(0)|答案(2)|浏览(112)

在Linux中,每个终端只与一个会话相关联(一个会话有一个或多个进程组,一个进程组有一个或多个进程)。
是否有某个函数(或命令)接受tty设备文件(例如:/dev/tty1/dev/pts/0)并返回与此tty/terminal关联的会话id?

xxe27gdn

xxe27gdn1#

执行以下步骤:

  1. stat您要检查的TTY。特别是,找出它正在使用的主/次设备ID。使用公式major*256+minor将它们组合成一个数字(或仅取stat的原始数字)
    1.打开/proc/并扫描名称仅为数字的所有目录。该目录的名称是系统中某个进程的pid
    1.对于每个这样的目录,打开/proc/pid/stat,并将文件解析为以空格分隔的字段(第二个字段除外,它周围有括号)。第7个字段将是TTY设备的主/次。扫描,直到找到与您正在查找的TTY匹配的TTY。
    1.该文件中的第6个字段是进程的sid(您要查找的数字)。第8个字段是TTY的pgrp
    文件结构在这里详细说明。
vdzxcuhz

vdzxcuhz2#

By Mohit BATRA =每次打开一个终端,都会启动一个新的会话,并为其分配一个唯一的会话ID。如果我们需要找到与每个终端关联的会话ID,则可以通过= ps命令,和By = tty命令,我们可以找到终端类型或编号,并获得会话I'我们需要再打开终端两次,并使用= tty检查它的终端号,然后运行

ps -exo sess,tty | grep pts/1

这里pts/1是我的终端号,我通过在终端上运行命令= tty得到的,这在你的情况下是不同的,只要注意你的并粘贴在grep之后,你就会得到那个会话的会话ID。

相关问题