У меня есть служба, которая работает как Local System
и иногда отказывается останавливаться.
Сервисный процесс получает сигнал завершения, выполняет очистку, но несколько потоков продолжают работать из-за ошибки.
SCM сообщает в журнал событий с идентификатором 7011:
Время ожидания (30000 миллисекунд) было достигнуто при ожидании ответа транзакции от ... службы.
После этого службы отображаются как остановленные в окне «Службы» в консоли управления и в WMI.
Но как Windows работает со службой, если она не прекращает работу? Я не могу перезапустить службу: процесс запуска старой службы все еще блокирует файлы и привязан к портам.
Я ожидаю, что Windows убьет процесс, который не отвечает, но я не могу найти какую-либо документацию или настройки по этому поводу.
30000 мсек, кажется, взято из HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\ServicesPipeTimeout
(https://support.microsoft.com/en-us/help/839803/the-windows-trace-session-manager-service-does-not-start -и-идентификатор события). Но через 30 секунд я получаю только событие, процесс все еще там.
Согласно аварийному дампу, основной поток был прерван, и есть несколько потоков, ожидающих на сокете в некотором WaitForSingleObject
.
Мы уже сообщили об ошибке поставщику, и он пытается ее исправить. Но в основном вопрос в том, что делать, чтобы убить этот процесс, можно ли его очистить без перезагрузки.