我正在编写一个必须执行其他外部进程的程序;现在,程序通过popen启动进程的命令行,获取任何输出,然后通过pclose获取退出状态。
然而,正在发生的是,对于快速运行的进程(例如,快速启动的进程错误),pclose调用无法获得退出状态(pclose返回-1,errno是ECHILD)。
我是否有办法模仿popen / pclose类型的行为,除非以一种方式保证捕获进程结束“事件”和结果返回代码?如何使用pclose避免固有的竞争条件并终止已启动的进程?
答案 0 :(得分:3)
叉/ EXEC /等待
popen只是简化fork / exec调用的包装器。如果要获取子项的输出,则需要创建管道,调用fork,将子项的文件描述符复制到管道,然后执行exec。父级可以读取管道的输出并调用wait来获取子级的退出状态。
答案 1 :(得分:1)
您可以使用vfork()和execv()。