как процесс узнает, когда он был задокументирован?

StackOverflow https://stackoverflow.com/questions/1002008

  •  05-07-2019
  •  | 
  •  

Вопрос

Когда я проверяю файл, я могу остановить его с помощью ^ Z и поместить в фоновый режим. Когда он находится в фоновом режиме, он прекращает печатать свой прогресс, но копирование продолжается. Если я снова на переднем плане, он возобновляет печать. Как это узнать? SIGTTOU? это происходит на стандартном ptty?

Это было полезно?

Решение 2

Мой коллега и я на самом деле просмотрели источник и нашли ответ.

Всякий раз, когда scp собирается напечатать вывод, он запускает tcgetpgrp на stdout. Это вернет группу управления процессом терминала (при условии, что это терминал). Он будет распечатан, только если группа процессов, управляющая терминалом, совпадает с группой процессов scp. Оказывается, никакой сигнализации не требуется! (Хотя он обрабатывает SIGWINCH для вычисления размера строки прогресса).

Другие советы

Да, ты понял. Процесс будет перехватывать или игнорировать SIGTTOU (и, возможно, SIGTTIN, в зависимости от того, что он делает), и тогда он будет вести себя соответствующим образом при получении этих сигналов. Linux действительно отправляет эти сигналы на обычные псевдо-терминалы.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top