等待子进程,超时



我的powershell脚本需要等待进程完成。此进程会生成一个子进程。

所以如果我使用

Start-Process myexe.exe -Wait

运行正常

然而,我需要我的脚本来处理这个过程没有完成的情况。例如:1小时后。

所以我的尝试是:

$process = Start-Process myexe.exe -PassThru
try {
"Waiting"
$process | Wait-Process -Timeout 3600 -ErrorAction Stop
"Done waiting"
}
catch {
"Stopping process"
Stop-Process $process -Force
}

问题是Wait-Process立即完成,因为进程$process是空闲的(完成?),但它的子进程不是。

那么我如何使Wait-Process等待子进程,如Start-Process中的-Wait标志?

如果您使用存储在$Process中的进程名执行get-process,这将捕获该进程的所有实例,并允许您将所有子进程传递给Wait-Process,请参阅下面更新的脚本

$process = Start-Process myexe.exe -PassThru
try {
"Waiting"
Get-Process $Process.ProcessName | Wait-Process -Timeout 3600 -ErrorAction Stop
"Done waiting"
}
catch {
"Stopping process"
Get-Process $Process.ProcessName | Stop-Process -Force
}

编辑:更新了Stop-Process以使用get-process来捕获所有子进程。

最新更新