TerminateProcess 和死锁

发布于 2024-09-02 18:29:20 字数 166 浏览 6 评论 0原文

Windows 中的 TerminateProcess 函数真的会因为进程内的线程陷入死锁而挂起吗?

示例:进程 A 在进程 B 的控制下运行,现在进程 A 陷入死锁,进程 B 检测到这一情况并决定使用 TerminateProcess“终止”进程 A。

是否能够成功杀死挂起的进程A?

Is it real that the TerminateProcess function in Windows could hang because the threads inside the process were stuck in a deadlock?

Example: Process A is running under Process B's control, now Process A gets into a deadlock and Process B detects this and decides to 'Kill' process A using TerminateProcess.

Would it be successful in killing the hung Process A?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(3

节枝 2024-09-09 18:29:20

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

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

Yes, all kernel objects held by the process will be released, including locks.

The main problem with TerminateProcess is that the process has no say in the matter: if it's holding on to any global state (files, shared memory, etc) then you have no guarantee those things are in a consistent state after the process is terminated.

风尘浪孓 2024-09-09 18:29:20

是的。只要您拥有正确的权限,TerminateProcess 就会杀死其他进程,无论它挂起的情况如何。

Yes. So long as you have the right permissions, TerminateProcess will kill the other process dead, regardless of how well hung it is.

软糯酥胸 2024-09-09 18:29:20

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

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

TerminateProcess will kill each thread (as if TerminateThread had been used on each and every thread in the process).

But it won't kill threads that are stuck in the kernel (e.g. due to device driver bug).

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文