执行摘要:我需要一种方法来确定我通过 _spawnl 生成并正在使用 _pipe 中的 FD 进行通信的 Windows 进程是否已经死亡。
细节:
我正在使用 Windows 中的低级 CRT 函数(_eof,_read)与通过调用 _spawnl(使用 P_NOWAIT)标志生成的进程进行通信。我正在使用 _pipe 创建文件描述符以与这个生成的进程进行通信,并在命令行上将这些描述符(FD #)传递给它。
值得一提的是,我不控制生成的过程。对我来说这是一个黑匣子。
事实证明,我们生成的进程偶尔会崩溃。我试图通过检测崩溃来使我的代码对此具有健壮性。不幸的是,我看不到这样做的方法。在我看来,如果进程终止,对其中一个描述符的 _eof 或 _read 调用将返回错误状态 (-1),这似乎是合理的。
不幸的是,事实并非如此。描述符似乎有自己的生命,独立于生成的进程。因此,即使另一端的进程已经死了,我用来与之通信的文件描述符上也没有错误状态。
我已经获得了嵌套进程的 PID(从 _spanwnl 调用返回),但我没有看到任何可以用它做的事情。我的代码运行良好,除了一件事。我无法检测到生成的进程是否只是忙于计算我的答案或已经死亡。
如果我可以使用来自 _pipe 和 _spawnl 的信息来确定生成的进程是否已死,我会很高兴。
非常欢迎提出建议。
提前致谢。
更新:我找到了一个相当简单的解决方案并将其添加为选定的答案。