为什么强制结束一个进程
1个回答
关注
展开全部
咨询记录 · 回答于2023-03-29
为什么强制结束一个进程
您好,很高兴为您解答。强制结束一个进程的原因如下:当一个进程结束运行(可能是正常结束,或者被TerminateProcess强制结束),这个进程的户模式部分将会被彻底销毁并被系统回收。但是来了。但是,其内核模式部分不会简单地被清理,而是会等到线程中所有的驱动代码结束运行。举个例子如果进程中的某个线程正在进行I/O操作,内核向负责I/O的驱动程序发出信号,表明应该取消操作。如果这个驱动代码被正确地实现,则它将清理所有未完成的I/O操作并释放线程。如果它没有被正确地实现,或者正在被操作的硬件没那么快完成操作,则就会需要一段比较长的时间来完成整个取消动作。在这段时间里,线程是否能结束运行,完全由驱动代码决定,因为线程属于进程,也即进程是否结束运行,完全由驱动决定。如果你觉得这个问题可能是因为驱动造成的,你可以使用内核调试器,找到被挂起的进程并从中确定没有正常退出的线程。具体来说,就是使用调试命令 [!irp] 来查看所有挂起的IRP,从而确定是哪个设备没有完成指定的控制动作。当进程中的所有驱动代码都完成其工作之后,整个进程才会完全结束它的运行。剩下的,就是进程对象了。进程对象会一直保留在系统中,直至所有引用它的进程句柄全部关闭且进程中的所有线程全部结束运行为止。你应该还记得,当调用CreateProcess之后,一定要调用CloseHandle关闭PROCESS_INFORMATION结构体中的进程句柄吧?换句话说,如果一个进程被强制结束后还是处于挂起状态,则表明:这个进程确实是”死了”,只是因为系统在等待所有相关的驱动代码完成清理,和所有打开的进程句柄被关闭。