TerminateProcess и тупики - PullRequest
2 голосов
/ 26 мая 2010

Реально ли, что функция TerminateProcess в Windows может зависнуть, потому что потоки внутри процесса застряли в тупике?

Пример: процесс A выполняется под управлением процесса B, теперь процесс A заходит в тупик, и процесс B обнаруживает это и решает «убить» процесс A с помощью TerminateProcess.

Успешно ли будет убить зависший Процесс А?

Ответы [ 3 ]

4 голосов
/ 26 мая 2010

Да, все объекты ядра, удерживаемые процессом, будут освобождены, включая блокировки.

Основная проблема с TerminateProcess заключается в том, что процесс не имеет права голоса в этом вопросе: если он удерживается в каком-либо глобальном состоянии (файлы, общая память и т. Д.), То у вас нет гарантии, что после процесса все эти данные находятся в согласованном состоянии. прекращено.

0 голосов
/ 26 мая 2010

TerminateProcess уничтожит каждый поток (как если бы TerminateThread использовался в каждом потоке процесса).

Но это не убьет потоки, которые застряли в ядре (например, из-за ошибки драйвера устройства).

0 голосов
/ 26 мая 2010

Да. Если у вас есть необходимые разрешения, TerminateProcess убьет другой процесс мертвым, независимо от того, насколько хорошо он завис.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...