Comment définir un délai d'attente pour un processus sous Windows 7?

Je voudrais démarrer un programme avec un fichier de commandes windows. Mais le programme devrait s'arrêter après une certaine valeur de délai d'attente. Par exemple: exécutez le programme 60 secondes et arrêtez-le après 60 secondes.

Sous Linux, il y a cette belle commande timeout pour faire ce que je veux. Windows a également une commande timeout, mais c'est juste pour mettre en pause une commande, pour retarder son exécution. Y at-il autre chose sous Windows pour le faire ?

Configuration: Windows 7, 64 Bits, Professionnel

21
demandé sur John Threepwood 2012-11-22 18:53:00

4 réponses

start yourprogram.exe
timeout /t 60
taskkill /im yourprogram.exe /f
29
répondu Bali C 2012-11-22 14:57:46

Bali C a donné une réponse concise et au point. J'avais besoin de quelque chose d'un peu plus fonctionnel et réutilisable. Basé sur L'exemple de Bali C. Je suis venu avec cette. Si quelqu'un a besoin de la même chose que moi.

Votre.MTD

REM...

CALL STARTwaitKILL..bat /relative/path/your_program.exe

REM...

STARTwaitKILL.MTD

@ECHO OFF 
IF[%1]==[] GOTO EOF
IF NOT EXIST %1 GOTO EOF

REM SET PRIORITY=/NORMAL
REM ADJUST PRIORITY, BELOWNORMAL LETS BATCH FILE RUN MORE SMOOTHLY
REM WITH A PROGRAM THAT CONSUMES MORE CPU. SEE ABOUT MAXWAIT BELLOW
SET PRIORITY=/BELOWNORMAL
REM SET PRIORITY=/LOW
REM 0 NORMAL WINDOW :: 1 NO WINDOW :: 2 MINIMIZED WINDOW
SET /A HIDDEN=1
REM MAXWAIT HERE IS MORE LIKE MINIMUM WAIT IN WINDOWS.
SET MAXWAIT=10
SET WAITCOUNT=0

SET ARGS=/I %PRIORITY%
IF %HIDDEN% EQU 1 SET ARGS=%ARGS% /B
IF %HIDDEN% EQU 2 SET ARGS=%ARGS% /MIN

START %ARGS% %1

:WAIT
IF %WAITCOUNT% GEQ %MAXWAIT% GOTO KILL_IT

TIMEOUT /T 1 > NUL
SET /A WAITCOUNT+=1
FOR /F "delims=" %%a IN ('TASKLIST ^| FIND /C "%~nx1"') DO IF %%a EQU 0 GOTO RUN_DONE
GOTO WAIT

:KILL_IT
TASKKILL /IM %~nx1 /F > NUL
:RUN_DONE

Pourrait être étoffé minerai de prendre plus d'arguments pour la priorité et autres, mais je n'en ai pas besoin. Ça ne devrait pas être difficile à ajouter.

11
répondu LMercury 2013-08-04 16:49:15

N'existe pas de commande dans Windows pour retarder une application ou pour définir un délai d'attente pour une application

Timeout dans Windows est pour retarder le processus D'exécution de CMD / Batfile, rien de plus utilitaire.

Vous pouvez utiliser des outils externes pour cela, je ne me souviens pas du nom de tout maintenant, tant de logiciels souterrains, désolé, mais je me souviens que dans le forum officiel autoit existe un outil de ligne de commande similaire pour lancer une application définissant le délai d'attente, et peut-être dans L'outil NIRCMD, ou ps2exec, vérifier leur aide fichiers, ou quelqu'un à l'intérieur des Kits WAIK.

C'est le seul que vous pouvez faire:

@Echo OFF

:: First launch the app in background mode, because some applications stops the execution of CMD.
Start /B ".\Dir\Your app.exe"

:: Then stay in background for a certain time
Timeout /T "Seconds"

:: Continue your code...
Pause&Exit
4
répondu ElektroStudios 2012-11-22 15:30:06

Le start+timeout+taskkill attend exactement le temps donné. Comme je devais arrêter d'attendre si le processus se termine plus tôt , j'ai créé ma propre solution en C++.

Le programme tuxliketimeoutimite le délai D'attente GNU. N'hésitez pas à télécharger et compiler à partir de

Https://github.com/cernoch/tuxliketimeout

1
répondu Radomír Černoch 2018-03-12 16:03:12