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