Как заставить HPUX принять TTY в качестве управляющего

Вопрос, который появился в списке рассылки sshpass (а также в переполнение стека). Sshpass не работает на HP-UX.

Глядя на вывод фермы, я вижу следующее:

-u [/tmp/sshpass][14066]{3783827} fork() ................... (returning as child ...) ......... = 14064 {3783821}

Дочерний процесс 14066.

-u [/tmp/sshpass][14066]{3783827} setpgrp3(2)................................................. [entry]
-u [/tmp/sshpass][14066]{3783827} setpgrp3(2)................................................. = 14066

Начать новый сеанс, отключившись от предыдущего телетайпа.

-u [/tmp/sshpass][14066]{3783827} open(0x400132d0, O_RDWR, 01210)............................. [entry]
-u [/tmp/sshpass][14066]{3783827} open("/dev/pts/5", O_RDWR, 01210)........................... = 6

Откройте /dev/pts/5 с флагами O_RDWR. Согласно Posix, в этот момент предполагается, что pts/5 станет управляющим терминалом для нового процесса. Этого, очевидно, не происходит.

Справочная страница HP-UX для open предполагает, что открытие /dev/pts/5 должно было заставить этот процесс принять его в качестве своего нового управляющего TTY. Я понятия не имею, почему этого не происходит, и не имею доступа к системе HP-UX для экспериментов.


person Shachar Shemesh    schedule 04.09.2017    source источник


Ответы (1)


Человек, у которого это была система, на самом деле должен был обратиться в службу поддержки HP, чтобы получить ответ, но, поскольку теперь у нас есть ответ, я опубликую его здесь.

Из termios(7) справочная страница:

Управляющий терминал наследуется дочерним процессом во время fork() (см. fork(2)). Процесс отказывается от своего управляющего терминала, если он создает новый сеанс с помощью setsid() или setpgrp() (см. setsid(2) и setpgrp(2)), или когда все файловые дескрипторы, связанные с управляющим терминалом, закрыты< /сильный>.

(выделение добавлено).

Насколько я могу судить, часть, выделенная жирным шрифтом, является идиосинкразией HPUX и не является частью ни Posix, ни, если уж на то пошло, других платформ Unix.

Проблема в том, что sshpass открывает соответствующий tty и сразу же закрывает дескриптор файла, поскольку предполагает, что он уже установлен в качестве управляющего TTY процесса.

Из-за особенностей HPUX это означает, что TTY становится процессом, управляющим TTY, и сразу же останавливается после закрытия.

person Shachar Shemesh    schedule 04.11.2017