Контролирующий терминал
От: Chichikadze Израиль http://mika0x65.livejournal.com
Дата: 27.11.04 17:57
Оценка:
Читая соответствующюю главу из книги запутался в том, кто занимается рассылкой сигналов HUP, TTIN, TTOU и TSTP. В книге сей вопрос описан несколько туманно...


Что понял: Есть группы процессов, делятся на 2 категории: текущая и фоновая. По иду группы определить кто из ху нельзя. Значит: либо об этом должен знать шелл, либо сам драйвер терминала. 1ый случай, как я понимаю не годится, т.к. когда процесс фоновой группы пытается что-то записать/считать с управляющего терминала, он получает TTOU/TTIN, а откуда об этом знать шеллу? Во втором случае шелл должен сообщить ид новой группы драейверу и сказать, что она в бэкграунде... Тоже не вяжется, т.к. некоторые программы (find, например) умудряются заявлять о себе даже из бэкграунда. В книге отмечено, что если бы шелл не умел управлять заданиями, все процессы, включая фоновые, были бы в его группе и ему самому пришлось бы разруливать сигналы...

В общем, need help, словами или ссылкой...

Заранее благодарен .
Re: Контролирующий терминал
От: TheBeard Россия  
Дата: 27.11.04 19:08
Оценка:
Насколько понимаю, это зависит от ОС. 'info libc' раздел "Job Conrol"
описывает эти возможности для GNU libc. В частности, там описаны
принципы реализации shell'а.

Chichikadze wrote:
> кто занимается рассылкой сигналов HUP, TTIN, TTOU и TSTP.
Posted via RSDN NNTP Server 1.9 delta
Re: Контролирующий терминал
От: Murr Россия  
Дата: 28.11.04 19:09
Оценка:
Здравствуйте, Chichikadze, Вы писали:

C>Читая соответствующюю главу из книги запутался в том, кто занимается рассылкой сигналов HUP, TTIN, TTOU и TSTP. В книге сей вопрос описан несколько туманно...


Ядро.


C>Что понял: Есть группы процессов, делятся на 2 категории: текущая и фоновая.


Верно.

> По иду группы определить кто из ху нельзя.


Можно. В Linux: ioctl/TIOCGPGRP.

> Значит: либо об этом должен знать шелл, либо сам драйвер терминала. 1ый случай, как я понимаю не годится, т.к. когда процесс фоновой группы пытается что-то записать/считать с управляющего терминала, он получает TTOU/TTIN, а откуда об этом знать шеллу? Во втором случае шелл должен сообщить ид новой группы драейверу и сказать, что она в бэкграунде...


Верно. Должен и делает это.

>Тоже не вяжется, т.к. некоторые программы (find, например) умудряются заявлять о себе даже из бэкграунда.


Если у терминала стоит флажок TOSTOP (man tcsetattr), то на него могут выводить процессы фоновой группы.

>В книге отмечено, что если бы шелл не умел управлять заданиями, все процессы, включая фоновые, были бы в его группе и ему самому пришлось бы разруливать сигналы...


Это абсолютно верно.
Re[2]: Контролирующий терминал
От: Murr Россия  
Дата: 28.11.04 19:11
Оценка:
Здравствуйте, Murr, Вы писали:

M>Если у терминала стоит флажок TOSTOP (man tcsetattr), то на него могут выводить процессы фоновой группы.


Пардон. Если НЕ стоит, конечно же.
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.