popen / pclose的替代品?

时间:2009-08-03 17:30:54

标签: c process popen

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

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

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

2 个答案:

答案 0 :(得分:3)

叉/ EXEC /等待

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

答案 1 :(得分:1)

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