在 Linux 上,伪代码大致如下所示:
setup_env();
pid = fork();
if (pid == 0) {
// we are the child
closeUnusedPipeEnd();
setup_child();
execve();
}
closeOtherUnusedPipeEnd();
posix_spawn 使用 file_actions 来注册子进程在 spawnp 中将执行的操作,这可以归结为 Clone() 而不是 fork()。
但是,我没有找到有关如何关闭子进程中匿名管道未使用端的 Windows 示例。 我是在子进程中执行此操作的唯一选择吗,例如通过标准输入解析或环境变量? 或者 Windows 中匿名管道的最佳实践是什么?
假定管道句柄是从 kernel32.CreateNamedPipeW
和 kernel32.CreateFileW
创建的,并读取重叠 IO
的句柄 ( FILE_FLAG_OVERLAPPED
)。
最佳答案
应该将 kernel32.SetHandleInformation()
与 HANDLE_FLAG_INHERIT
一起使用,以仅继承子进程中使用的管道端。
关于c - 在 Windows 上关闭子进程的非标准匿名管道句柄的最佳方法是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/72355844/