master pty如何检测slave tty是否已退出?

时间:2008-11-05 05:50:53

标签: c linux pty

我正在使用BSD样式的pty / tty对来实现运行子shell。当用户退出子shell时,如何在主进程中检测到发生了这种情况?我正在使用select(nfds,& read_fds,NULL,NULL,& timeout);在主端的read_fds中设置master pty文件描述符。

2 个答案:

答案 0 :(得分:3)

子shell通常由某种fork()创建。子进程的PID返回给主服务器,主服务器可以检查(可能是waitpid())它是否仍在运行。

答案 1 :(得分:2)

通过检查GNU inetutils包中的telnetd源代码,我找到了这个问题的答案。在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