对象,windows分为用户对象和内核对象.
说的最多的就是内核对象.
内核对象有很多,进程,文件,管道,and so on.
需要记录的只有一个东西:CloseHandle
进程,有进程的内核对象,进程的内核对象比此进程的存在周期要常.
进程结束的时候它所对应的内核对象并不会立刻结束,而是检查它的计数器(貌似在EPROCESS里面)是否为0,如果是0才会去释放全部资源.
这就意味着当一个进程运行的时候,如果别的进程调用了OpenProcess打开了这个进程,那么即使是这个进程退出了,它的内核对象并不会完全释放,因为计数器不为0,还有别的进程有访问权(也就是拿到了句柄),什么时候这个句柄被CloseHandle了,或者那个进程退出了,这个进程才会完全释放资源.
我是犯了一个书上说的错误,在CreateProcess后没有CloseHandle断绝与子进程的关系,这也就造成了,只要父进程不退出,子进程即使退出了,它的内核对象永远都不会完全释放资源,从另一面来说就是浪费了资源,不管说这部分资源,内存是否被交换到了硬盘上,反正是浪费,绝对的浪费.
特此标记,谨记,有兴趣的朋友可以去参考此书的[第四章---进程]