Управляющий терминал
100%

Процессы · Урок 2

Управляющий терминал

Узнайте, как управляющие терминалы связывают сеансы с интерактивным вводом, сигналами и управлением заданиями оболочки.

У интерактивного сеанса входа может быть управляющий терминал — связанное с сеансом терминальное устройство, которое ядро использует для порождённых терминалом сигналов и управления заданиями. Поле TTY в списках процессов помогает определить такую связь.

Терминальные и псевдотерминальные устройства

Название TTY происходит от исторических телетайпов. В современной Linux терминальные интерфейсы являются абстракциями устройств и не обязательно относятся к физическому оборудованию.

Системная виртуальная консоль может иметь имя вроде tty1. Сочетания клавиш рабочего стола для переключения консолей различаются между дистрибутивами, поэтому не следует их предполагать. Эмулятор терминала, удалённый вход или мультиплексор обычно использует пару псевдотерминалов, интерактивная сторона которой показывается именем вроде pts/3.

Выведите терминал, подключённый к стандартному вводу текущей команды:

$ tty
/dev/pts/3

Этот результат связан с более широким понятием управляющего терминала, но не равнозначен ему. Процесс может перенаправить стандартный ввод или вывод, оставаясь в сеансе с управляющим терминалом.

Что обычно обозначает имя вроде pts/3?

Сеансы, группы процессов и управление заданиями

Управляющий терминал принадлежит сеансу, а не только команде, которая открыла окно. Внутри сеанса терминал отслеживает группу процессов переднего плана. Оболочка помещает конвейер переднего плана в эту группу, чтобы он мог читать ввод и получать порождённые терминалом сигналы.

Например, при нажатии Ctrl-C драйвер терминала обычно отправляет SIGINT группе процессов переднего плана. Фоновая группа, пытающаяся читать из терминала, может получить SIGTTIN. Эти правила позволяют оболочке координировать задания переднего и заднего плана.

Каким процессам терминал обычно направляет сигнал, порождённый Ctrl-C?

Чтение столбца `TTY`

Для устойчивого представления явно запросите выбранные поля процессов:

$ ps -o pid,tty,stat,cmd

Имя терминала вроде pts/3 обозначает управляющий терминал, записанный для процесса. Знак вопроса (?) обычно означает, что у процесса нет управляющего терминала.

У многих служебных процессов нет управляющего терминала, поскольку диспетчер служб запускает их независимо от интерактивного сеанса входа. Однако отсутствие TTY само по себе не доказывает, что процесс является демоном, а фоновое задание оболочки всё ещё может иметь управляющий терминал.

Что обычно означает ? в столбце TTY команды ps?

Закрытие терминала и сигналы разрыва

Когда терминальное соединение исчезает, ядро или программное обеспечение терминала и сеанса может отправить связанным процессам SIGHUP. Процесс способен завершиться, перехватить сигнал, игнорировать его или заранее быть настроенным на продолжение. Функции оболочки вроде disown, утилиты вроде nohup, мультиплексоры и диспетчеры служб влияют на жизненный цикл.

Поэтому закрытие терминала не гарантирует завершение каждой запущенной из него команды. Когда важна устойчивость, проверяйте сеанс процесса, обработку сигналов, перенаправления и супервизор.

Почему утверждение, что закрытие терминала всегда завершает все запущенные в нём процессы, неверно?

Урок завершён

Вы завершили Управляющий терминал

Теперь вы можете связать управляющий терминал с интерактивным управлением процессами.

  • Отличайте виртуальные терминалы от псевдотерминалов.

  • Связывайте терминальные сигналы с группой процессов переднего плана.

  • Интерпретируйте имена терминалов и ? в выводе ps.

  • Рассматривайте закрытие терминала как отправку сигнала, а не гарантированное завершение процесса.

Сохраните прогресс

Создайте бесплатный аккаунт, чтобы сохранить этот урок и продолжить на любом устройстве.

Создать бесплатный аккаунт
Следующий Урок
Назад к Процессы