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