当管道写入标准输出时,为什么 write() 会退出程序?

发布于 2024-08-09 00:31:43 字数 323 浏览 12 评论 0原文

我有一个服务器应用程序,它在单独的线程中写入 popen("myCommand", "w") 文件描述符,如果传递给 popen() 的命令导致任何输出到 stdout 或 stderr,则我的应用程序退出。但是,这只是当我的服务器应用程序通过 inetd 调用时才会出现的问题,如果我使用 ssh 启动服务器,则不会出现此问题。

类似地,当我的服务器应用程序在单独的线程中读取 popen("myCommand2", "r") 文件描述符时,如果传递给 popen() 的命令导致任何输出到 stderr(stdin 将进入我的管道),则应用程序退出。同样,这只发生在 inetd 调用时,而不是 ssh 调用时。

I have a server application that writes to a popen("myCommand", "w") file descriptor in a separate thread and if the command passed to popen() results in any output to stdout or stderr, the my application exits. However, this is only an issue when my server application was invoked via inetd, if I used ssh to launch the server, it does not have this issue.

Similarly, when my server application reads from a popen("myCommand2", "r") file descriptor in a separate thread and if the command passed to popen() results in any output to stderr (stdin is going to my pipe), the application exits. Again, this only occurs with inetd summoning, not ssh summoning.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

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

发布评论

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

评论(1

孤千羽 2024-08-16 00:31:43

你需要在打开管道之前关闭进程中所有存在的fd,然后进行I/O重定向。这是因为如果是 inetd,该进程将作为守护进程运行。

you need to close all existed fds of the process before open the pipe, then do i/o redirection. that's because if inetd, the process runs as a daemon.

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