如何判断popen启动的进程何时完成?
我将描述符(从popen返回的文件*上调用的fileno()传递给一个函数,该函数调用fstat()并使用返回的值来确定要读取的内容。令人惊讶的是,如果存在延迟(例如,单步执行调试器),这实际上是有效的,但如果在弹出窗口之后立即调用,则返回0的文件大小所以我需要一些方法等到所有的输出都准备好了-我该怎么做我假设我不能调用pclose(),即使它在等待,因为描述符不再有效。
Update:实际上,如果我假设fstat()在管道调用中失败了,那么代码似乎可以正常工作—问题似乎是fstat()并没有像预期的那样失败。所以我真正想要的是一种判断描述符是否是管道的方法-fstat返回st_mode=0(本来应该是S_IFIFO!)

最佳答案

如果不从管道中读取,子进程很可能永远不会终止。管道两端之间的缓冲区相当小因此,当子进程写入输出时,缓冲区将填满,子进程将在write()调用中阻塞那你就会陷入僵局父进程正在等待子进程终止,然后再从管道读取数据,子进程将被阻止,直到父进程从管道读取数据,因此无法终止。

关于c - 等待popen子进程终止,然后再读取,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/29554036/

10-16 23:42