Задать вопрос
@NeoLight3

При попытке убить процесс, он тупо зависает, но не умирает. Что делать?

Есть сервер Unturned.exe. Который может иногда зависать, по многим причинам.
Для этого я нашел скрипт который автоматически при детектировании зависания, перезагружает процесс, т.е убивает зависший и стартует новый.
BAT код:
@ECHO OFF
:CHECK
TASKLIST /NH /FI "IMAGENAME EQ Unturned.exe" /FI "STATUS EQ RUNNING" | FIND /I ":" > NUL
IF %ERRORLEVEL%==0 GOTO NOT_RUNNING
TIMEOUT /T 10 /NOBREAK
GOTO CHECK
:NOT_RUNNING
TASKKILL /IM Unturned.exe
START Unturned.exe -pvp -port:25444 -normal -pei -players:32 -sv -nographics -nosync
TIMEOUT /T 10 /NOBREAK
GOTO CHECK


Проблема в том, что при попытке убить зависший процесс он просто зависает, и реально убить его можно только вручную клацая на крестик много раз.
5f5b975625a8a849721750.png

Можно с помощью bat-кода по настоящему убить уже этот зависший и проблемный процесс?
  • Вопрос задан
  • 140 просмотров
Подписаться 1 Простой Комментировать
Решения вопроса 1
@Vitsliputsli
У TASKKILL есть ключ F - принудительное завершение.
Ответ написан
Пригласить эксперта
Ответы на вопрос 1
HemulGM
@HemulGM
Delphi Developer, сис. админ
Это происходит, потому что сигнал завершения подается основному потоку приложения, а этот основной поток в это время может быть зависим от другого, который как раз и не отвечает. Т.е. приложение радо бы закрыться, но сигнал до основного потока приложения ещё не дошёл.
Промониторить это можно через "Монитор ресурсов", где можно увидеть цепочку ожиданий.
5f5b9d81004ad120482408.png

Соответственно, завершив ожидаемый поток, завершится и требуемый.

Мой "ответ" чисто справочный. Частичное решение написали выше
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы