[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