2013-10-23 14 views
6

Utilizzando PowerShell 2.0 in un desktop di Windows 7Come aspettare e uccidere un processo di timeout in PowerShell

Voglio creare un processo per eseguire un comando di formica, e quindi attendere per quel processo di finire in pochi minuti. Se il timeout e il processo sono ancora in esecuzione, voglio ucciderlo.

ho scritto un po 'di codice come di seguito:

$p = Start-Process "cmd.exe" '/c ant execute' -PassThru -RedirectStandardOutput $log_file_path 
Wait-Process -id $p.ID -timeout 100 
if(!$p.hasExited) { 
    echo "kill the process" 
    $p.Kill() 
    #Stop-Process $p.ID 
} 

Start-Sleep -s 30 

# continue to do other things 

Anche se il processo non ha ottenuto ucciso, è ancora in corso, anche dopo la dichiarazione di inizio-sonno eseguito.

Ho anche provato con il comando Stop-Process, in quanto la linea commentata indica, non c'è fortuna, il processo ancora in esecuzione.

Forse mi sono perso qualcosa di importante, per favore dacci un indizio.

EDIT:

Si scopre ci sono alcuni processi figlio ancora in esecuzione nella finestra cmd, uccidere solo il processo cmd non è sufficiente.

ho finalmente ottenere il lavoro fatto con il seguente codice:

if(!$p.hasExited) { 
    echo "kill the process" 
    taskkill /T /F /PID $p.ID 
    #$p.Kill() 
    #Stop-Process $p.ID 
} 

risposta

0

ho spinto nel progetto piccola github che può essere utilizzato per eseguire processi e timeout di installazione per lui e per il suo bambino proccesses: https://github.com/burlachenkok/process_tool

È una fonte con Makefile e non è uno script PowerShell. Ma spero che possa esserti utile per te.

Problemi correlati