簡體   English   中英

當管道向stdout寫入數據時,為什么將write()管道退出程序?

[英]Why does write() to pipe exit program when pipe writes to stdout?

我有一個服務器應用程序在單獨的線程中寫入popen(“ myCommand”,“ w”)文件描述符,並且如果傳遞給popen()的命令導致任何輸出到stdout或stderr,則我的應用程序退出。 但是,這僅是在通過inetd調用服務器應用程序時出現的問題,如果我使用ssh啟動服務器,則不會出現此問題。

同樣,當我的服務器應用程序在單獨的線程中從popen(“ myCommand2”,“ r”)文件描述符讀取時,如果傳遞給popen()的命令導致stderr有任何輸出(stdin將進入我的管道),則應用程序退出。 同樣,這僅在inetd調用中發生,而不是在ssh調用中發生。

您需要在打開管道之前關閉該進程的所有現有fds,然后進行I / O重定向。 這是因為如果是inetd,則該進程將作為守護程序運行。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM