首页 > 解决方案 > 孩子的等待过程,有超时

问题描述

我的 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等待像-Wait标志这样的子进程Start-Process呢?

标签: powershell

解决方案


如果您get-process使用存储在其中的进程名称执行 a$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 来捕获所有子进程。


推荐阅读