Как получить идентификатор сеанса, связанный с терминалом?
В Linux каждый терминал связан только с одним сеансом (сеанс имеет одну или несколько групп процессов, а группа процессов имеет один или несколько процессов).
Есть ли какая-либо функция (или команда), которая принимает файл tty устройства (например: /dev/tty1
или же /dev/pts/0
) и возвращает идентификатор сеанса, связанный с этим терминалом / терминалом?
2 ответа
Выполните следующие шаги:
stat
TTY, который вы хотите проверить. В частности, узнайте основной / вспомогательный идентификатор устройства, который он использует. Объедините их в одно число по формулеmajor*256+minor
(или просто взять необработанное число изstat
)открыто
/proc/
и отсканируйте все каталоги, имя которых состоит только из цифр. Имя каталогаpid
процесса в системе.Для каждого такого каталога откройте
/proc/pid/stat
и разберите файл на поля, разделенные пробелом (за исключением второго поля, которое заключено в квадратные скобки). Седьмое поле будет основным / второстепенным устройством TTY. Сканируйте, пока не найдете тот, который соответствует TTY, который вы ищете.6-е поле в этом файле
sid
для процесса (номер, который вы ищете). Восьмое поле - TTY'spgrp
,
Структура файла подробно здесь.
Автор Мохит БАТРА = Каждый раз, когда вы открываете терминал, запускается новый сеанс, и ему присваивается уникальный идентификатор сеанса. Если нам нужно найти идентификатор сеанса, связанный с каждым терминалом, то это может быть возможно с помощью =ps
команда и По =tty
командой мы можем найти тип или номер терминала, и чтобы получить сеанс, который я с ним связал, нам нужно открыть терминал еще два раза и проверить его номер терминала с помощью = tty, а затем запустить
ps -exo sess,tty | grep pts/1
Здесь pts/1 — это номер моего терминала, который я получил, выполнив команду = tty на терминале, и в вашем случае это по-другому, просто запишите свой и вставьте после grep, и вы получите идентификатор сеанса этого сеанса. Удачи.