Как мастер pty может определить, вышел ли подчиненный tty?
Вопрос
Я использую пары pty / tty в стиле BSD для реализации запуска вспомогательной оболочки. Когда пользователь выходит из вложенной оболочки, как мне определить в основном процессе, что это произошло? Я использую select (nfds, & amp; read_fds, NULL, NULL, & amp; timeout); с дескриптором главного файла pty, установленным в read_fds на главной стороне.
Решение 2
Я нашел ответ на этот вопрос, изучив исходный код 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
Другие советы
подоболочка обычно создается каким-то fork ()
. PID дочернего элемента возвращается мастеру, который может проверить (с помощью waitpid ()
, возможно), работает ли он по-прежнему.
Не связан с StackOverflow