【发布时间】:2009-11-16 20:50:33
【问题描述】:
假设我通过popen(只读)从流程 PA 生成流程 PO。然后我pclose() PA 那边的管道。
在 PO 方面,如果不执行 write(),我如何确定 stdout 是否仍然可用?
请注意,我已尝试在 PO 端捕获 SIGPIPE,但无济于事。
更新:我尝试使用fstat(1, &buf),但没有成功。
更新:我需要通过 PO 检测这种情况的原因是我无法从 PA 访问 PO 的 PID(因此无法杀死它)。此外,我希望 PO 在 PA 失败(即自行退出)时更加稳健。
解决方案:我继续使用socketpair、fork。试图通过popen 控制进程结果是一场噩梦(至少对我而言)。 非常感谢所有做出贡献的人!
【问题讨论】:
-
为什么不能让 PO 通过管道发送它的 PID?
-
您似乎真的在这里突破了 popen() 的极限。为什么不想走fork()等路线?
-
@Duck:我可以通过 STDOUT 发送 PID,但有两件事:1)另一边有更多逻辑,2)仍然 PO 不能自己提交 hara-kiri 知道 STDOUT 的状态管道。