как процесс узнает, когда он был задокументирован? - PullRequest
2 голосов
/ 16 июня 2009

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

Ответы [ 2 ]

2 голосов
/ 16 июня 2009

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

1 голос
/ 16 июня 2009

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

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

...