Find centralized, trusted content and collaborate around the technologies you use most.
Teams
Q&A for work
Connect and share knowledge within a single location that is structured and easy to search.
我正在编写一个必须执行其他外部进程的程序;现在程序通过 popen 启动进程的命令行,获取任何输出,然后通过 pclose 获取退出状态。
然而,正在发生的是,对于快速运行的进程(例如,启动的进程很快出错),pclose 调用无法获得退出状态(pclose 返回 -1,errno 是 ECHILD)。
有没有办法让我模仿 popen/pclose 类型的行为,除非以保证捕获进程结束“事件”和结果返回代码的方式?如何避免 pclose 的固有竞争条件和启动进程的终止?
分叉/执行/等待
popen 只是简化 fork/exec 调用的包装器。如果要获取子节点的输出,则需要创建一个管道,调用 fork,将子节点的文件描述符复制到管道,然后执行。父级可以从管道读取输出并调用等待以获取子级的退出状态。
您可以使用 vfork() 和 execv()。