[d-kernel] о pppd, группах процессов, терминалах, /dev/pts и SIGHUP

Artem u2u на nm.ru
Чт Окт 13 01:30:00 MSD 2005


Доброго всем времени суток.
Небольшое введение. Имеется аппаратный модем на /dev/ttyS0. + pppd . При 
разрыве соединения по вине модема - pppd шлется SIGHUP. Насколько я 
понял из чтения исходников kernel, ядром ( см. tty_io.c ) посылаются
SIGHUP и SIGCONT группе процессов, связанных с данным терминалом. Т.е. 
выполняется функция do_tty_hangup (см. kernel-source/drivers/char/tty_io.c).
Далее.. Имеется софтмодем (slmodemd + snd_intel8x0m). Работает все это 
дело через /dev/pts (устройство
модема /dev/ttySLM0 является symlink-ом на /dev/ptx/x, где x - вирт. 
вторичный терминал, выделенный для связи pppd или чего там еще с 
slmodemd. Slmodemd слушает на другом конце - /dev/ptmx
Вопрос. Как реализовать поведение /dev/pts, аналогичное с поведением 
/dev/ttySx ? Судя по исходникам /dev/pts - это всего лишь фс (в 
подробностях реализации не разбирался - это каналы? ). Функций, подобных 
tty_hangup в
/dev/pts я не обнаружил. Неужели единственным вариантом является 
сканирование /proc на предмет открытого процессами /dev/pts/x и отсылка 
всем обнаруженным процессам SIGHUP- а?  Ведь при обрыве соединения по 
вине софтмодема - pppd работает дальше, не зная о том, что физический 
уровень уже давно в дауне. Соответственно - никакого пересоединения.

Rgds, Artem


Подробная информация о списке рассылки devel-kernel