http://bbs.pediy.com/showthread.php?t=154031
问题地址,只有一个人回答了,但感觉好象不对,所以发到csdn来了
请大家帮忙回答回答,讨论讨论
1> 书作者是否矛盾了,该怎样理解
2> 如果进程不退出,但CloseHandle(pi.ProcessHandle)了,id是否可被重用
下面是问题内容
=======================================================================
Windows核心编程5版4章4.2.7节关于子进程id有矛盾问题
99页 "说明"里的文字
说明
应用程序运行期间,必须关闭到子进程及其主线程的句柄,以避免资源泄漏。当然,系统会在你的进程终止后自动清理这种泄漏。但是,如果是一个编写精妙的软件,肯定会在进程不再需要访问一个子进程及其主线程的时候,显式地调用CloseHandle来关闭这些句柄。忘记关闭这些句柄是开发人员最容易犯的错误之一。
应该是建议大家创建子进程后,就用CloseHandle关闭子进程和主线程句柄
但100页 4.3节的向上的一段文字说
要保证一个进程或线程ID不被重用,惟一的办法就是保证进程或线程对象不被销毁。为此,在创建了一个新进程或线程之后,不关闭到这些对象的句柄即可。等到应用程序不再使用ID的时候,再调用CloseHandle来释放内核对象。但是,一旦调用了CloseHandle,再使用或依赖进程ID就不安全了。这一点务必牢记
就是说保证id不被重用的唯一方法就是不关闭句柄.
那这就有疑问了,如果CloseHandle关闭了进程或者主线程句柄, 系统开新进程的id会使用原来的那个么?????
如果会,那不是乱套了,资源管理器里出现2个相同的进程的应用程序,
如过不会,那不是作者自己说的前后矛盾了.
请朋友们指点,谢谢。