powershell - 孩子的等待过程,有超时
问题描述
我的 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
呢?
解决方案
如果您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 来捕获所有子进程。
推荐阅读
- powershell - 如何将命令行参数设为整数但如果给定非数字值再次询问?
- c# - C#在窗口之间传递数据(WPF)
- javascript - 在每行的第一个元素上设置边框
- sql-server - SQL Azure 中的 Active Directory 身份验证和延迟问题
- c# - PostAsync 执行后立即从继承的地方返回
- excel - Excel VBA - 验证列中的电子邮件地址并复制到剪贴板
- javascript - 如果需要,如何创建一个可以导入单个组件的库 à la lodash
- nginx - Nginx 入口控制器不会通过重定向保留 url
- angular - 无法使用 Angular CLI 创建新项目
- google-cloud-dataflow - 如何获取通过数据流运行的查询的 BigQuery 作业 ID?