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