Как установить время ожидания для команды в cmd - PullRequest
0 голосов
/ 30 декабря 2018

Я хочу запустить команду, и если она не завершится в течение 1 секунды, я хочу, чтобы она вернула 31744.

Пример:

C:\Users\Admin\Desktop\my_django_stuff>mycommand < input.txt > output txt 
timeout /t 1

Это дает мне синтаксическую ошибку,и если время выполнения моей команды бесконечно, то оно также не останавливается через 1 сек.

Ответы [ 2 ]

0 голосов
/ 03 января 2019
start "UniqueWindowTitle" mycommand < input.txt > output txt
ping -n 2 localhost >nul
taskkill /FI "WINDOWTITLE eq UniqueWindowTitle" /f |find " PID " && (
   echo task was killed.
   exit /b 31744
) || (
   echo there was no task to kill.
   echo it terminated in time.
)

К сожалению, taskkill не возвращает полезный уровень ошибки, поэтому мы анализируем вывод (если задача была убита, это SUCCESS: Sent termination signal to the process with PID 12345.
В зависимости от вашего реального приложения вам может понадобиться или не понадобиться *Параметр 1005 * («Force»)

Я заменил timeout на ping-n 2 localhost, потому что timeout 1 на самом деле не ждет 1 секунду, но пока не наступит «следующая секунда» - что может занять всего несколько миллисекундэкстремальные ситуации.

Кроме того, я искал не «УСПЕХ», а «PID», чтобы он не зависел от языка (нет PID, когда процесс не найден).

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

Вот возможное решение:

@echo off

start "custom" mycommand < input.txt > output txt 
timeout /t 1
taskkill /FI "WINDOWTITLE eq custom" /FI "IMAGENAME eq mycommand" /f | findstr /c:"PID" >nul
if errorlevel 1 (
    echo Task was killed!
    pause>nul
    exit /b 0
) else (
    echo The task was killed successfully! Will exit with code your_custom_code
    pause>nul
    exit /b your_custom_code
)

Теперь вы уверены, что программа была прекращена ( f orcbly).

Обратите внимание, что здесь мы используем timeout вместо ping, поскольку это будетобязательно длиться что-то меньше 1/4 секунды.Так что, поскольку taskkill будет длиться немного, у вас наверняка будет что-то более 1 секунды.

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