Limite di tempo della riga di comando di Windows


9

Come potrei fare per limitare il tempo di esecuzione di un programma da riga di comando in Windows? So che in Linux è disponibile timeout / timelimit, ma non sono stato in grado di trovare utilità simili per Windows.


Probabilmente è meglio scrivere uno script Powershell o Python per farlo.
Breakthrough

Risposte:


9
start yourprogram.exe
ping 127.0.0.1 -n 10
taskkill /im yourprogram.exe

Se lo metti nel blocco note e lo salvi in ​​quanto .batcreerà un file batch che lo farà.

Ho usato 10 secondi come esempio, basta modificare le tue esigenze.

Inoltre, se stai utilizzando Vista o superiore, puoi eliminare la pinglinea e utilizzare il timeoutcomando molto più semplice al suo posto

timeout /t 10

1
In che modo questo gestirà argomenti e istanze multiple del tuo programma? Sarebbe bello se start restituisse un PID, ma nessuna tale fortuna ...

Puoi passare argomenti con start yourprogram.exe yourarguments. Sì, avrebbe taskkillun'opzione per uccidere tramite PID, ma dovresti estrarlo dal tasklistprimo in base al nome, che è tornato al punto di partenza se hai più istanze. Questa è solo una limitazione di cmd.
Bali C,

1
+1 Usare il ping come timer per il timer è un'idea divertente :)
kol

Aggiungi > NULal pingcomando per comprimerne l'output.
starbeamrainbowlabs

4

Come so che non sembra esistere una tale funzione, ma penso che sia fattibile se lo esegui come attività di Windows tramite l'Utilità di pianificazione, da lì puoi impostare una limitazione di esecuzione, l'impostazione denominata come: Interrompi l'attività se viene eseguita più di: puoi ottenere maggiori dettagli da qui: http://technet.microsoft.com/en-us/library/cc722178.aspx


3

Se sei infastidito dall'uso di PowerShell: $app = Start-Process -PassThru -FilePath 'notepad' -ArgumentList 'test.txt'avvierà il blocco note con un argomento di test.txt (puoi separare più argomenti di ,.

Start-Sleep -Seconds 10 dormirà per 10 secondi.

Sia $app.Kill()o taskkill /PID $app.Iducciderà l'applicazione avviata.

Se preferisci una soluzione cmd che chiamerà PowerShell solo per avviare il processo e quindi memorizzarne il PID in una variabile: for /F %A in ('powershell -Command "(Start-Process -PassThru -FilePath 'notepad' -ArgumentList 'test.txt').Id"') do set PID=%A(quando chiamato da un .bat / .cmd devi usare %%Ainvece di %A). È quindi possibile utilizzare i metodi di timeout di @ BaliC e taskkill /PID %PID%terminare l'applicazione avviata.


1

Soluzione:

In Windows è necessario creare tre file batch

process.bat

@ECHO OFF
start   /b cm.bat
start  cmd.exe /c run.bat
EXIT

cm.bat

@ECHO OFF
a.exe < input.txt > out.txt
taskkill /im a.exe /f
taskkill /im cmd.exe /f
EXIT

run.bat

@ECHO off
timeout /t 5
taskkill /im a.exe /f 
taskkill /im cmd.exe /f

EXIT

Ora esegui process.bat. inizierà contemporaneamente sia cm.bat che run.bat / parallelamente. Al termine di a.exe da cm.bat; cm.bat uccide run.bat e quindi funzionerà come timeout di Ubuntu.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.