一个历程死了,它的所有句柄都会释放吗
一个进程死了,它的所有句柄都会释放吗?
例如,一个进程创建了一个命名的mutex,然后这个进程崩溃了。
它再次启动的时候,还能成功创建这个mutex吗?
MSDN或者什么地方有没有确定的说法,进程句柄在进程结束的时候全都会被OS释放?
------解决方案--------------------
进程的内核对象中有一个句柄表,即使代码没有显示关闭句柄,进程结束的时候也会关闭句柄表中的有效句柄。
刚创建的mutex对象引用计数是1,只有当一个对象引用计数是0的时候,才会销毁这个对象。
也就是说如果别的进程没有打开这个mutex,那么进程结束肯定mutex就销毁了,下次启动还会重新创建;如果别的进程打开了这个mutex,那么引用计数为2,你的进程结束了,引用计数-1,但不会销毁,你的程序下次启动,调用CreateMutex可能也会成功,但这是打开mutex,而不是创建。
例如,一个进程创建了一个命名的mutex,然后这个进程崩溃了。
它再次启动的时候,还能成功创建这个mutex吗?
MSDN或者什么地方有没有确定的说法,进程句柄在进程结束的时候全都会被OS释放?
------解决方案--------------------
进程的内核对象中有一个句柄表,即使代码没有显示关闭句柄,进程结束的时候也会关闭句柄表中的有效句柄。
刚创建的mutex对象引用计数是1,只有当一个对象引用计数是0的时候,才会销毁这个对象。
也就是说如果别的进程没有打开这个mutex,那么进程结束肯定mutex就销毁了,下次启动还会重新创建;如果别的进程打开了这个mutex,那么引用计数为2,你的进程结束了,引用计数-1,但不会销毁,你的程序下次启动,调用CreateMutex可能也会成功,但这是打开mutex,而不是创建。