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.
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.
Risposte:
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 .bat
creerà 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 ping
linea e utilizzare il timeout
comando molto più semplice al suo posto
timeout /t 10
start yourprogram.exe yourarguments
. Sì, avrebbe taskkill
un'opzione per uccidere tramite PID, ma dovresti estrarlo dal tasklist
primo in base al nome, che è tornato al punto di partenza se hai più istanze. Questa è solo una limitazione di cmd.
> NUL
al ping
comando per comprimerne l'output.
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
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.Id
ucciderà 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 %%A
invece di %A
). È quindi possibile utilizzare i metodi di timeout di @ BaliC e taskkill /PID %PID%
terminare l'applicazione avviata.
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.