Powershell 启动进程,等待超时,杀死并获取退出代码
Powershell Start Process, Wait with Timeout, Kill and Get Exit Code
我想循环重复执行一个程序。
有时,程序会崩溃,所以我想杀掉它,以便下一次迭代可以正确启动。我通过超时来确定这个。
我有超时工作但无法获取程序的退出代码,我还需要确定它的结果。
之前,我没有超时等待,只是在Start-Process中使用-wait,但是如果启动的程序崩溃,这会使脚本挂起。通过此设置,我可以正确获取退出代码。
我正在从 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
}
}
我怎么能
- 启动进程
- 等待它有序执行并完成
- 如果它崩溃了就杀掉它(例如命中超时)
- 获取进程的退出代码
您可以使用 $proc | kill
或 $proc.Kill()
更简单地终止进程。请注意,在这种情况下您将无法检索退出代码,您应该只更新内部错误计数器:
for ($i=0; $i -le $max_iterations; $i++)
{
$proc = Start-Process -filePath $programtorun -ArgumentList $argumentlist -workingdirectory $programtorunpath -PassThru
# keep track of timeout event
$timeouted = $null # reset any previously set timeout
# wait up to x seconds for normal termination
$proc | Wait-Process -Timeout 4 -ErrorAction SilentlyContinue -ErrorVariable timeouted
if ($timeouted)
{
# terminate the process
$proc | kill
# update internal error counter
}
elseif ($proc.ExitCode -ne 0)
{
# update internal error counter
}
}
我想循环重复执行一个程序。
有时,程序会崩溃,所以我想杀掉它,以便下一次迭代可以正确启动。我通过超时来确定这个。
我有超时工作但无法获取程序的退出代码,我还需要确定它的结果。
之前,我没有超时等待,只是在Start-Process中使用-wait,但是如果启动的程序崩溃,这会使脚本挂起。通过此设置,我可以正确获取退出代码。
我正在从 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
}
}
我怎么能
- 启动进程
- 等待它有序执行并完成
- 如果它崩溃了就杀掉它(例如命中超时)
- 获取进程的退出代码
您可以使用 $proc | kill
或 $proc.Kill()
更简单地终止进程。请注意,在这种情况下您将无法检索退出代码,您应该只更新内部错误计数器:
for ($i=0; $i -le $max_iterations; $i++)
{
$proc = Start-Process -filePath $programtorun -ArgumentList $argumentlist -workingdirectory $programtorunpath -PassThru
# keep track of timeout event
$timeouted = $null # reset any previously set timeout
# wait up to x seconds for normal termination
$proc | Wait-Process -Timeout 4 -ErrorAction SilentlyContinue -ErrorVariable timeouted
if ($timeouted)
{
# terminate the process
$proc | kill
# update internal error counter
}
elseif ($proc.ExitCode -ne 0)
{
# update internal error counter
}
}