5

我正在编写一个必须执行其他外部进程的程序;现在程序通过 popen 启动进程的命令行,获取任何输出,然后通过 pclose 获取退出状态。

然而,正在发生的是,对于快速运行的进程(例如,启动的进程很快出错),pclose 调用无法获得退出状态(pclose 返回 -1,errno 是 ECHILD)。

有没有办法让我模仿 popen/pclose 类型的行为,除非以保证捕获进程结束“事件”和结果返回代码的方式?如何避免 pclose 的固有竞争条件和启动进程的终止?

4

2 回答 2

3

分叉/执行/等待

popen 只是简化 fork/exec 调用的包装器。如果要获取子节点的输出,则需要创建一个管道,调用 fork,将子节点的文件描述符复制到管道,然后执行。父级可以从管道读取输出并调用等待以获取子级的退出状态。

于 2009-08-03T17:45:59.350 回答
1

您可以使用 vfork() 和 execv()。

于 2009-08-03T17:35:03.820 回答