我的印象是,如果一个应用程序有一个打开的句柄并且它崩溃了,那么句柄就不会被释放,如果你试图访问那个句柄(让我们说一个文件),那么你会得到一个错误。
但是,我已经在Windows XP中尝试了这个,如果我在关闭句柄之前从任务管理器关闭exe,那么句柄似乎会被释放。以下是代码:
Private Sub Form_Load()
Dim iFile As Integer
iFile = FreeFile
Open "myfilelock" For Output Lock Read Write As #iFile
MsgBox "About to close" 'close it here with task manager
Close #iFile
End Sub
那么,如果有这些句柄的exe崩溃,Windows XP会不会释放所有打开的句柄?
答案 0 :(得分:4)
当应用程序崩溃时,所有版本的Windows都会关闭内核句柄。甚至Windows 95都这样做了。当然,基于Windows NT内核或更高版本的任何内容都会在应用程序崩溃时关闭内核句柄。
这包括文件,事件,信号量,共享内存,管道和套接字的句柄
答案 1 :(得分:1)
当程序退出或崩溃时,所有现代操作系统都会清理所有程序资源 - 内存,句柄,套接字,线程等。否则,您会从应用程序开发人员忘记在退出时关闭的每个句柄中获得大量资源泄漏,并且必须定期重启你的电脑......