当管道写入stdout时,为什么write()管道退出程序?

时间:2009-10-19 03:05:28

标签: c++ ssh stdout pipe inetd

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

同样,当我的服务器应用程序从一个单独的线程中的popen(“myCommand2”,“r”)文件描述符中读取并且如果传递给popen()的命令导致任何输出到stderr(stdin将进入我的管道) ),应用程序退出。同样,这只发生在inetd召唤,而不是ssh召唤。

1 个答案:

答案 0 :(得分:0)

你需要在打开管道之前关闭进程的所有现有fds,然后进行i / o重定向。那是因为如果inetd,进程作为守护进程运行。