主 pty 如何检测从 tty 是否已退出?
我使用 BSD 风格的 pty/tty 对来实现运行子 shell。 当用户退出子 shell 时,如何在主进程中检测到这种情况已经发生? 我正在使用 select(nfds, &read_fds, NULL, NULL, &timeout); 在主端的 read_fds 中设置主 pty 文件描述符。
I am using BSD style pty/tty pairs to implement running a sub shell. When the user exits the sub shell, how do I detect in the master process that this has occurred? I am using select(nfds, &read_fds, NULL, NULL, &timeout); with the master pty file descriptor set in the read_fds on the master side.
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(2)
子 shell 通常由某种
fork()
创建。 子进程的 PID 返回给主进程,主进程可以检查(也许使用 waitpid())它是否仍在运行。The subshell is typically created by a
fork()
of some sort. The PID of the child is returned to the master, which can check (withwaitpid()
, perhaps) if it's still running.我通过检查 GNU inetutils 包中的 telnetd 源代码找到了这个问题的答案。 在 telnetd 中,他们使用如下 SIGCHLD 处理程序:
I've found the answer to this question by examining the telnetd source code found in the GNU inetutils package. In telnetd, they use a SIGCHLD handler like this: