Powershell-Prozess Starten, Warten mit Timeout, Töten Sie und Holen Sie Exit-Code
Möchte ich wiederholt die Ausführung eines Programms in einer Schleife.
Manchmal stürzt das Programm ab, so will ich es töten, so dass die nächste iteration kann richtig beginnen. Ich bestimme dies über timeout.
Habe ich das timeout arbeiten, aber kann nicht den Exit-Code des Programms, die ich auch brauche, um zu bestimmen das Ergebnis.
Bevor ich nicht warten mit timeout, aber nur -warten in der Start-Prozess, aber dadurch wurde das Skript hängen bleibt, wenn das gestartete Programm abgestürzt. Mit diesem setup konnte ich richtig erhalten, der exit-code obwohl.
Bin ich der Ausführung von ISE.
for ($i=0; $i -le $max_iterations; $i++)
{
$proc = Start-Process -filePath $programtorun -ArgumentList $argumentlist -workingdirectory $programtorunpath -PassThru
# wait up to x seconds for normal termination
Wait-Process -Timeout 300 -Name $programname
# if not exited, kill process
if(!$proc.hasExited) {
echo "kill the process"
#$proc.Kill() <- not working if proc is crashed
Start-Process -filePath "taskkill.exe" -Wait -ArgumentList '/F', '/IM', $fullprogramname
}
# this is where I want to use exit code but it comes in empty
if ($proc.ExitCode -ne 0) {
# update internal error counters based on result
}
}
Wie kann ich
- Einen Prozess starten,
- Warten, bis es ordentlich ausführen und fertig
- Töten, wenn es abgestürzt ist (e. g. trifft timeout)
- bekommen exit-code des Prozesses
InformationsquelleAutor Andreas Reiff | 2016-04-29
Du musst angemeldet sein, um einen Kommentar abzugeben.
Können Sie den Prozess zu beenden, einfach mit
$proc | kill
oder$proc.Kill()
. Seien Sie sich bewusst, dass Sie nicht in der Lage zum abrufen einer exit-code in diesem Fall sollten Sie eher aktualisieren Sie einfach die interne Fehler-Zähler:Du hast Recht, ich dachte, Warten-Prozess wird etwas zurückgeben. Ich bearbeitet meine Antwort, die ich jetzt ordnen Sie der Fehlermeldung $timeouted und im Fall, dass ein timeout aufgetreten ist, ist Es gesetzt.
Danke! (Es gab da einen kleinen Tippfehler.) Funktioniert Super!
Können Sie näher erläutern, was die
-ea 0 -ev timeouted
Werte sind? Ich kann nicht finden, diese irgendwo dokumentiert, aber ich brauche, um zu bestimmen, wenn eine Wait-Process timed out oder nicht, und es sieht aus wie diese sind, was Sie verwenden, in Ihrem Beispiel-code.Danke für die edit - ich sollte vermeiden, die Aliase...
InformationsquelleAutor Martin Brandl