使用 Windows API 在 C++ 中创建子进程时,可以允许从父进程到子进程继承句柄。在 Microsoft 示例“Creating a Child Process with Redirected Input and Output”中,将子进程的 std in/out 重定向到由父进程创建的管道,必须允许继承以使重定向管道可用。
我正在开发一个小型演示类,它启动一个外部可执行文件,读取输出,然后将其吐回给调用者(后者将返回的输出记录到文件中)。TerminateProcess()
我正在尝试构建一个超时功能,它只会在调用孩子并继续生活之前阻塞一段时间。
但是,我发现通过允许句柄继承,子进程还有一个到输出文件的句柄(使用Process Explorer可见)。我不希望子进程获得这个句柄,但是在这种情况下,父进程(这个演示类)也不知道这个句柄,所以我目前不能使用SetHandleInformation()
专门取消标记输出文件以将其从继承中排除。
我确信必须有更好的方法来仅继承我想要的特定句柄,而不允许传递意外和不希望的句柄的“一揽子”继承。不幸的是,我浏览了尽可能多的相关 MSDN 文章,并在谷歌上搜索到了自己的沮丧状态,但我一直无法找到解决方案。
至少,我需要做一些事情来从孩子身上删除句柄,而不必在演示类中拥有这些句柄(它们由调用类使用,并且这个演示类没有明确知道它们的存在)。
更多选择性继承的任何解决方案?我对允许我专门声明要继承哪些句柄的解决方案特别感兴趣,如果存在这样的解决方案,所有未指定的句柄都不会被继承。
非常感谢你。