Я хочу многократно выполнять программу в цикле.Powershell Start Process, Wait with Timeout, Kill и Get Exit Code
Иногда программа вылетает из строя, поэтому я хочу ее убить, чтобы следующая итерация могла начать правильно. Я определяю это с помощью тайм-аута.
У меня есть тайм-аут, но я не могу получить код выхода программы, который также должен определить его результат.
Раньше я не ждал с таймаутом, а просто использовал -wait в Start-Process, но это заставило скрипт зависать, если запущенная программа разбилась. С этой настройкой я мог бы правильно получить код выхода.
Выполняется с 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
}
}
Как
- Начать процесс
- ждать, пока она упорядоченно выполнить и завершить
- убить его, если он разбился (например, хиты тайм-аута)
- Получить код выхода процесса
[Как ждать и убить процесс ожидания в Powershell] (HTTPS: //stackoverflow.com/q/19532998/995714) –