2010-05-25 104 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)線程。