c ++:TerminateProcess(procHandle,0)

时间:2011-10-04 18:28:11

标签: c winapi

我使用“TerminateProcess(procHandle,0)”来杀死线程。它适用于大多数,但有些线程无法杀死。为什么?此外,任务管理器也无法杀死这些线程。

有没有办法强制杀死任何线程? 我还能做什么?

thx

3 个答案:

答案 0 :(得分:1)

  

[...]这些场景通常是有缺陷的设备驱动程序的结果   没有正确处理未完成I / O的取消   请求。

请参阅Unkillable Processes

答案 1 :(得分:1)

通常,如果您没有所需权限,则无法终止其他用户的进程。例如,无法终止作为SYSTEM用户运行的进程,终端服务器上其他用户的进程等等。

来自MSDN的引文:“句柄必须具有PROCESS_TERMINATE访问权限。有关更多信息,请参阅进程安全性和访问权限。”

答案 2 :(得分:0)

我遇到了你提到的同样的情况。

由于TerminateProcess是异步的并且来自MSDN的The terminated process cannot exit until all pending I/O has been completed or canceled. When a process terminates, its kernel object is not destroyed until all processes that have open handles to the process have released those handles.引用。

此外I / O等待正常情况,有两种方法可以取消IO。

  1. 致电CancelIo手动取消IO。
  2. 从注册表HKEY_LOCAL_MACHINE\System\CurrentControlSet\Services\Disk\TimeOutValue
  3. 减少写入超时值