主 pty 如何检测从 tty 是否已退出?

发布于 2024-07-08 13:35:27 字数 170 浏览 14 评论 0原文

我使用 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 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

£冰雨忧蓝° 2024-07-15 13:35:27

子 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 (with waitpid(), perhaps) if it's still running.

过期以后 2024-07-15 13:35:27

我通过检查 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

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:

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
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文