TerminateProcess和死锁

时间:2010-05-25 21:19:20

标签: c++ multithreading process deadlock

Windows中的TerminateProcess函数是否可以挂起,因为进程内的线程陷入死锁?

示例:进程A在进程B的控制下运行,现在进程A陷入死锁,进程B检测到这一点,并决定使用TerminateProcess'杀死'进程A.

是否可以成功杀死悬挂的流程A?

3 个答案:

答案 0 :(得分:4)

是的,将释放进程持有的所有内核对象,包括锁。

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

答案 1 :(得分:0)

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

答案 2 :(得分:0)

TerminateProcess将终止每个线程(就像在进程中的每个线程上都使用TerminateThread一样)。

但它不会杀死内核中的线程(例如由于设备驱动程序错误)。