Как мастер pty может определить, вышел ли подчиненный tty?

StackOverflow https://stackoverflow.com/questions/264428

  •  06-07-2019
  •  | 
  •  

Вопрос

Я использую пары 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 () , возможно), работает ли он по-прежнему.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top