Запись на терминал (SIGTTOU не приходит)

Модератор: Модераторы разделов

_petya_
Сообщения: 53

Запись на терминал

Сообщение _petya_ »

Значит так. Создаётся фоновая группа процессов (все процессы в группе писаны мною). Сеанс, в котором находится данная группа, связан с управляющим терминалом. Атрибут TOSTOP терминала установлен (проверяю в коде).
Сигнал SIGTTOU не заблокирован, обработчик не изменялся (обработка по умолчанию).
В такой ситуации при попытке записи процессом из фоновой группы на управляющий терминал ему (процессу) должен высылаться этот самый SIGTTOU, чего не происходит. Отчего сигнал не приходит? Я упустил ещё какой-то момент, кроме атрибута TOSTOP?
Спасибо сказали:
hyde
Сообщения: 3

Re: Запись на терминал

Сообщение hyde »

afaik, SIGTTOU не посылается только в 2-х случаях:
1. TOSTOP не установлен (исключено по условию).
2. Процесс который пытается писать в терминал -это
orphan process (родитель у которого сдох).
Собственно, вопрос в том сдыхает ли родитель
пишущего в терминал процесса ?
Спасибо сказали:
_petya_
Сообщения: 53

Re: Запись на терминал

Сообщение _petya_ »

Родитель здравствует, и родитель родителя здравствует...
Кстати, забыл важный момент - на терминал всё записанное процессами группы выводится. Получается, что write отрабатывает без ошибок.
Буду благодарен за высказанные предположения и догадки (хотя бы куда копать).
Спасибо сказали:
hyde
Сообщения: 3

Re: Запись на терминал

Сообщение hyde »

Раз всё выводится, то похоже на поведение по дефолту, когда TOSTOP не установлен.
Можно попробовать поставить TOSTOP не из проги, а с помощью stty tostop и посмотреть
на поведение.
Спасибо сказали:
_petya_
Сообщения: 53

Re: Запись на терминал

Сообщение _petya_ »

Управляющим терминалом для этой группы является псевдотерминал ( устройство pts/1 ) - приложение запускается из xterm'а.
Проверил работу с "настоящим" управляющим терминалом ( tty* ) - всё происходит так, как и должно быть - сигнал приходит.
Видимо, драйвер псевдотерминала не генерирует сигнала SIGTTOU, хотя пока нигде в литературе я упоминания о разнице в поведении в рассматриваемом случае драйверов терминала и псевдотерминала не нашёл.
Если у кого есть ссылка на доки по этой конкретонй теме - скиньте пожалуйста.

Следующий вопрос, связанный с терминальной темой:
функции для работы с терминалами ( tcgetattr , tcsetattr , tcdrain ) должны использоваться только для работы с управляющим терминалом, или их можно использовать с любыми терминалами ( например, с COM-портами )?
Спасибо сказали: