GSe*_*erg 8 winapi handle interprocess child-process
微软在这里玩得很安全 在他们的文章"创建具有重定向输入和输出的子进程"中,他们说:
此过程终止时,将清除剩余的打开句柄.
为避免较大应用程序中的资源泄漏,请显式关闭句柄.
这完全没用.处理什么?在哪个过程中?
我想绕过它.
在父进程中创建句柄时SECURITY_ATTRIBUTES.bInheritHandle = TRUE,子进程可以查看和使用它,并且句柄在两个进程中具有相同的值和访问权限.
但它是相同的句柄,还是碰巧具有相同数字表示的副本?
如果我将hRead句柄传递给子进程以便它可以从管道中读取,并且子进程关闭句柄,是否还需要从父进程关闭它?它不会从子进程下擦除管道吗?
我的实验表明,在孩子关闭后,CloseHandle尝试关闭hRead传递给孩子的句柄时返回成功.这强烈支持是的,你应该关闭它.但是,我希望在这里提出更可靠的建议.
Chr*_*cke 11
你在那里击中了钉子.Win32句柄充当对底层内核模式对象的用户模式引用.通常通过某种CreateXXX调用创建新对象和现有对象的句柄(引用) - 通过调用DuplicateHandle可以在当前或其他进程中创建其他引用- {或将句柄标记为可继承并创建新进程 -将当前进程的句柄复制到子进程中 - 确保句柄值相同.}
此时,(至少)有两个对内核对象的引用,这两个引用都需要关闭以解锁对象并释放任何消耗的资源.
| 归档时间: |
|
| 查看次数: |
1039 次 |
| 最近记录: |