1

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

4

2 回答 2

3

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

于 2008-11-05T06:07:42.023 回答
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
于 2008-11-06T01:45:07.997 回答