c ++: TerminateProcess (procHandle, 0) - PullRequest
       0

c ++: TerminateProcess (procHandle, 0)

0 голосов
/ 04 октября 2011

Я использую «TerminateProcess (procHandle, 0)» для уничтожения потоков.Это работает для большинства, но некоторые потоки не могут убить.ЗАЧЕМ?Также диспетчер задач также не может уничтожить эти потоки.

Есть ли способ принудительно уничтожить любой поток?Что еще я могу сделать?

thx

Ответы [ 3 ]

1 голос
/ 04 октября 2011

Обычно вы не можете уничтожать процессы других пользователей, если у вас нет необходимых прав.Например, невозможно завершить процессы, выполняемые от имени пользователя SYSTEM, процессы других пользователей на терминальном сервере и т. Д.

Цитирование из MSDN: «Дескриптор должен иметь право доступа PROCESS_TERMINATE. Для получения дополнительной информации см.Безопасность процесса и права доступа. "

1 голос
/ 04 октября 2011

[...] Эти сценарии обычно являются результатом неисправных драйверов устройств. которые неправильно обрабатывают отмену невыполненных операций ввода-вывода запросы.

См. Неубиваемые процессы .

0 голосов
/ 20 июня 2014

Я встречал те же случаи, что вы упомянули.

Поскольку TerminateProcess является асинхронным и 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. Цитирование из MSDN.

Также возможен ввод / вывод в обычном случае, есть два способа отменить ввод / вывод.

  1. вызов CancelIo для отмены ввода-вывода вручную.
  2. уменьшение значения времени ожидания записи из реестра HKEY_LOCAL_MACHINE\System\CurrentControlSet\Services\Disk\TimeOutValue
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...