Программа обнаружения партии не отвечает - PullRequest
0 голосов
/ 27 декабря 2018

Я пытаюсь написать пакетный сценарий, который обнаруживает, что .exe не отвечает, а если нет, запускает фрагмент кода, который его убивает, а затем выполняет и другие действия.Я знаю, как можно завершить процесс и перезапустить его, если он не отвечает в одной строке, но я не уверен, что могу сделать больше, чем просто перезапустить его, преобразовав его в оператор if или вызвав goto.

taskkill /im "exeName.exe" /fi "STATUS eq NOT RESPONDING" /f >nul && start "" "pathToExe"

Я сталкивался с другими сообщениями переполнения стека, которые похожи на это, однако они только проверяют уровень ошибок процесса и не проверяют, не отвечает ли программа и как выполнить код после этого.

Как бы я поступил об этом?Заранее спасибо.

Ответы [ 2 ]

0 голосов
/ 27 декабря 2018

Можно сделать проще:

taskkill /FI "STATUS eq NOT RESPONDING" /IM "yourexe.exe" /F | findstr /c:"SUCCESS" >nul
if %errorlevel% EQU 0 (echo Successfully detected and terminated "yourexe.exe" which didn't respond) else (echo Ooops! We didn't find or could not terminate process "yourexe.exe")

Если вы хотите просто обнаружить , если процесс не отвечает, тогда используйте tasklist:

tasklist /FI "STATUS eq NOT RESPONDING" | findstr /c:"yourexe.exe">nul
if %errorlevel% EQU 0 (echo We have detected that process with image name "yourexe.exe" is not responding.) else (echo We didn't found process with image name "yourexe.exe" because it doesn't exist.)

В обоих случаях мы используем команду findstr, потому что даже если процесс не найден / завершен taskkill / tasklist вернет errorlevel 0.

0 голосов
/ 27 декабря 2018

Предполагая, что я правильно интерпретирую ваш вопрос, и вы хотите проверить, не убивая задачу, как об этом:

tasklist /fi "status eq not responding" /nh | find "exeName.exe" >NUL
if %errorlevel% == 0 (
    echo Oops, we've hung...
)

tasklist принимает те же параметры /fi status, что иtaskkill, хотя в документации указано, что разрешено только RUNNING - taskkill /? в Windows 8 по крайней мере показывает все параметры.Затем мы используем find, чтобы проверить, что исполняемый файл находится в списке не отвечающих задач.

Кстати, если вы хотите использовать PowerShell вместо:

$foo = get-process exeName
if (!$foo.Responding) {
    echo "Oops, we've hung..."
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...