Значит так. Создаётся фоновая группа процессов (все процессы в группе писаны мною). Сеанс, в котором находится данная группа, связан с управляющим терминалом. Атрибут TOSTOP терминала установлен (проверяю в коде).
Сигнал SIGTTOU не заблокирован, обработчик не изменялся (обработка по умолчанию).
В такой ситуации при попытке записи процессом из фоновой группы на управляющий терминал ему (процессу) должен высылаться этот самый SIGTTOU, чего не происходит. Отчего сигнал не приходит? Я упустил ещё какой-то момент, кроме атрибута TOSTOP?
Запись на терминал (SIGTTOU не приходит)
Модератор: Модераторы разделов
-
hyde
- Сообщения: 3
Re: Запись на терминал
afaik, SIGTTOU не посылается только в 2-х случаях:
1. TOSTOP не установлен (исключено по условию).
2. Процесс который пытается писать в терминал -это
orphan process (родитель у которого сдох).
Собственно, вопрос в том сдыхает ли родитель
пишущего в терминал процесса ?
1. TOSTOP не установлен (исключено по условию).
2. Процесс который пытается писать в терминал -это
orphan process (родитель у которого сдох).
Собственно, вопрос в том сдыхает ли родитель
пишущего в терминал процесса ?
-
_petya_
- Сообщения: 53
Re: Запись на терминал
Родитель здравствует, и родитель родителя здравствует...
Кстати, забыл важный момент - на терминал всё записанное процессами группы выводится. Получается, что write отрабатывает без ошибок.
Буду благодарен за высказанные предположения и догадки (хотя бы куда копать).
Кстати, забыл важный момент - на терминал всё записанное процессами группы выводится. Получается, что write отрабатывает без ошибок.
Буду благодарен за высказанные предположения и догадки (хотя бы куда копать).
-
hyde
- Сообщения: 3
Re: Запись на терминал
Раз всё выводится, то похоже на поведение по дефолту, когда TOSTOP не установлен.
Можно попробовать поставить TOSTOP не из проги, а с помощью stty tostop и посмотреть
на поведение.
Можно попробовать поставить TOSTOP не из проги, а с помощью stty tostop и посмотреть
на поведение.
-
_petya_
- Сообщения: 53
Re: Запись на терминал
Управляющим терминалом для этой группы является псевдотерминал ( устройство pts/1 ) - приложение запускается из xterm'а.
Проверил работу с "настоящим" управляющим терминалом ( tty* ) - всё происходит так, как и должно быть - сигнал приходит.
Видимо, драйвер псевдотерминала не генерирует сигнала SIGTTOU, хотя пока нигде в литературе я упоминания о разнице в поведении в рассматриваемом случае драйверов терминала и псевдотерминала не нашёл.
Если у кого есть ссылка на доки по этой конкретонй теме - скиньте пожалуйста.
Следующий вопрос, связанный с терминальной темой:
функции для работы с терминалами ( tcgetattr , tcsetattr , tcdrain ) должны использоваться только для работы с управляющим терминалом, или их можно использовать с любыми терминалами ( например, с COM-портами )?
Проверил работу с "настоящим" управляющим терминалом ( tty* ) - всё происходит так, как и должно быть - сигнал приходит.
Видимо, драйвер псевдотерминала не генерирует сигнала SIGTTOU, хотя пока нигде в литературе я упоминания о разнице в поведении в рассматриваемом случае драйверов терминала и псевдотерминала не нашёл.
Если у кого есть ссылка на доки по этой конкретонй теме - скиньте пожалуйста.
Следующий вопрос, связанный с терминальной темой:
функции для работы с терминалами ( tcgetattr , tcsetattr , tcdrain ) должны использоваться только для работы с управляющим терминалом, или их можно использовать с любыми терминалами ( например, с COM-портами )?