如果你没有源代码,那么除了通过查看它的callstack( k
或!sosex.mk
或!clrstack
或!eestack
)之外,是否有办法告诉一个线程目前在等待队列中等待会发生什么情况,如等待接收I / O中断还是来自I / O完成端口的通知?
或者可能只是一个睡眠线程不等待任何东西,但仍然在等待队列中的一个?
为了testing,我做了一个小的C#程序,在这个程序中,我使线程睡了20秒。
main() { Thread.Sleep(20000); }
当我把Windbg附加到它的过程。 并检查其线程状态,睡眠线程报告线程状态0x202a020
:
00:00> !threadstate 202a020 Legal to Join CoInitialized In Multi Threaded Apartment Fully initialized Interruptible
我了解每一个国家的国旗,除了我不清楚最后一个,即可中断 。 我的猜测是, Interruptible标志只是表示线程可能被任何内核级中断中断,但不一定表明它在等待队列中。 即使是运行状态线程也可能被中断,对吧?
那么,是否有一种简单的方法来知道线程是否在等待队列中? 或者即使它已经准备就绪,但还没有运行?