Как получить идентификатор сеанса, связанный с терминалом?

В Linux каждый терминал связан только с одним сеансом (сеанс имеет одну или несколько групп процессов, а группа процессов имеет один или несколько процессов).

Есть ли какая-либо функция (или команда), которая принимает файл tty устройства (например: /dev/tty1 или же /dev/pts/0) и возвращает идентификатор сеанса, связанный с этим терминалом / терминалом?

2 ответа

Выполните следующие шаги:

  1. stat TTY, который вы хотите проверить. В частности, узнайте основной / вспомогательный идентификатор устройства, который он использует. Объедините их в одно число по формуле major*256+minor (или просто взять необработанное число из stat)

  2. открыто /proc/ и отсканируйте все каталоги, имя которых состоит только из цифр. Имя каталога pid процесса в системе.

  3. Для каждого такого каталога откройте /proc/pid/statи разберите файл на поля, разделенные пробелом (за исключением второго поля, которое заключено в квадратные скобки). Седьмое поле будет основным / второстепенным устройством TTY. Сканируйте, пока не найдете тот, который соответствует TTY, который вы ищете.

  4. 6-е поле в этом файле sid для процесса (номер, который вы ищете). Восьмое поле - TTY's pgrp,

Структура файла подробно здесь.

Автор Мохит БАТРА = Каждый раз, когда вы открываете терминал, запускается новый сеанс, и ему присваивается уникальный идентификатор сеанса. Если нам нужно найти идентификатор сеанса, связанный с каждым терминалом, то это может быть возможно с помощью =psкоманда и По =ttyкомандой мы можем найти тип или номер терминала, и чтобы получить сеанс, который я с ним связал, нам нужно открыть терминал еще два раза и проверить его номер терминала с помощью = tty, а затем запустить

      ps -exo sess,tty | grep pts/1

Здесь pts/1 — это номер моего терминала, который я получил, выполнив команду = tty на терминале, и в вашем случае это по-другому, просто запишите свой и вставьте после grep, и вы получите идентификатор сеанса этого сеанса. Удачи.

Другие вопросы по тегам