2010-05-25 94 views
1

是真的在Windows TerminateProcess函数可以挂起,因为进程中的线程被卡在一个僵局?了TerminateProcess和死锁

实施例:进程A进程B的控制下运行,现在进程A进入死锁和方法B检测此并决定“杀死”过程A,使用了TerminateProcess。

难道是成功杀死挂起的进程阿?

回答

3

是,由工艺持有的所有内核对象将被释放,其中包括锁具。

TerminateProcess的主要问题是进程在这个问题上没有发言权:如果它持有任何全局状态(文件,共享内存等),那么你不能保证这些事情之后处于一致状态过程终止。

+0

那么是什么原因导致它在杀死它时挂起,它的母亲进程也是挂起的? – 2010-05-25 21:24:50

+0

如果它有未决的I/O,内核将在终止该过程之前等待未完成的I/O完成。如果进程处于内核模式,那么它也将一直等到完成(这两种情况都非常罕见,并且通常表示驱动程序损坏或硬件损坏) – 2010-05-25 21:33:36

0

是的。只要你有正确的权限,TerminateProcess将杀死其他进程死亡,无论它有多好。

0

TerminateProcess会杀死每一个线程(好像TerminateThread已经在这个过程中的每一个线程上使用)。

但它不会杀死所有被卡在内核中(例如,由于设备驱动程序的bug)线程。