Re: 关不掉的进程?
Windows内核调试
关不掉的进程?
zmsx
2010-02-26, 16:48 下午
我遇到一个很奇怪的问题,当用vs2005开发程序的时候,如果在release 情况下,按F5启动调试时,如果设置了断点,并且时console程序时,会发现程序运行结束后,无法自动退出。点右上角的关闭也没用。
这时任务管理器中已经看不到这个进程了。用windbg attach 也看不到这个进程。但是用local kernel 可以看到:
lkd> !PROCESS 88bfe020
PROCESS 88bfe020 SessionId: 0 Cid: 05e4 Peb: 7ffdf000 ParentCid: 0f68
DirBase: 0ac40560 ObjectTable: 00000000 HandleCount: 0.
Image: Test1.exe
VadRoot 00000000 Vads 0 Clone 0 Private 0. Modified 16. Locked 0.
DeviceMap e14a16f0
Token e35a0030
ElapsedTime 2 Days 01:46:34.765
UserTime 00:00:00.062
KernelTime 00:00:00.031
QuotaPoolUsage[PagedPool] 0
QuotaPoolUsage[NonPagedPool] 0
Working Set Sizes (now,min,max) (10, 50, 345) (40KB, 200KB, 1380KB)
PeakWorkingSetSize 2467
VirtualSize 37 Mb
PeakVirtualSize 40 Mb
PageFaultCount 2464
MemoryPriority BACKGROUND
BasePriority 8
CommitCharge 0
No active threads
不知道有什么原因会造成这种状况。或者有什么调试思路。谢谢。
Re: 关不掉的进程?
格蠹老雷
2010-02-26, 20:32 下午
直接的原因是这个进程的销毁过程完成了一部分,但没有全部完成。根据上面的信息,用户态的部分已经销毁了,所以没办法用户态调试了。但是进程对象和进程结构(_EPROCESS)还在,所以还在进程列表中。
调试的思路,可以用双机内核调试来跟踪销毁进程的过程。《软件调试》第10.8节有关于进程退出的简单介绍...
Re: 关不掉的进程?
zmsx
2010-02-26, 21:50 下午
谢谢张老师。我试试看
Re: 关不掉的进程?
SuperMouse
2010-04-08, 19:21 下午
估计是VS2005由于某种原因在进程退出后没有及时关闭打开的该进程句柄,导致了该进程的内核对象引用计数不为0,所以不会被销毁。