web-dev-qa-db-fra.com

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

Je voudrais démarrer un programme avec un fichier batch Windows. Mais le programme devrait s'arrêter après un certain délai d'expiration. Par exemple: exécutez le programme 60 secondes et arrêtez-le après 60 secondes.

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

Configuration: Windows 7, 64 bits, professionnel

27
John Threepwood
start yourprogram.exe
timeout /t 60
taskkill /im yourprogram.exe /f
34
Bali C

Bali C a donné une réponse concise et précise. 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 ça. Si quelqu'un a besoin de la même chose que moi.

your.bat

REM...

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

REM...

STARTwaitKILL.BAT

@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é pour prendre plus d'arguments pour la priorité et autres, mais je n'en ai pas besoin. Cela ne devrait pas être difficile à ajouter.

12
LMercury

start + timeout + taskkill attend exactement l'heure indiquée. 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 tuxliketimeout imite le délai GN . N'hésitez pas à télécharger et compiler à partir de

https://github.com/cernoch/tuxliketimeout

4
Radomír Černoch

N'existe aucune commande dans Windows pour retarder une application ou pour définir un délai d'expiration pour une application

Le délai d'attente 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 plus du nom d'aucun 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'expiration, et peut-être dans l'outil NIRCMD, ou ps2exec, consultez leurs fichiers d'aide, ou quelqu'un dans les kits WAIK.

C'est le seul que vous puissiez 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
ElektroStudios