Как мастер pty может определить, вышел ли подчиненный tty? - PullRequest
1 голос
/ 05 ноября 2008

Я использую пары pty / tty в стиле BSD для реализации запуска вспомогательной оболочки. Когда пользователь выходит из вложенной оболочки, как мне определить в основном процессе, что это произошло? Я использую select (nfds, & read_fds, NULL, NULL, & timeout); с дескриптором главного файла pty, установленным в read_fds на главной стороне.

Ответы [ 2 ]

3 голосов
/ 05 ноября 2008

подоболочка обычно создается чем-то вроде fork(). PID дочернего объекта возвращается мастеру, который может проверить (возможно, с waitpid()), работает ли он еще.

2 голосов
/ 06 ноября 2008

Я нашел ответ на этот вопрос, изучив исходный код telnetd, находящийся в пакете GNU inetutils. В telnetd они используют обработчик SIGCHLD, например:

int status;
pid_t pid = waitpid((pid_t)-1, &status, WNOHANG);
syslog (LOG_INFO, "child process %ld exited: %d",
    (long) pid, WEXITSTATUS(status));
// do cleanup code
...