我有一个运行各种可执行文件的powershell脚本。有时,一个可执行文件会运行很长时间,我希望看到一些进程统计信息,表明正在取得进展(有时没有任何进展,我需要停止当前进程并重新启动)。
我正在使用system.diagnostic.process对象来启动该进程。
$Quiet = $Process.Start()
if ($Monitor) {
if (-not $Timeout) { $Timeout = -1 }
$Process.WaitForExit($Timeout)
$LastReport = Get-Date
while (-not $Process.HasExited ) {
if (((Get-Date) - $LastReport).Minutes -gt 2) {
$Process.Refresh()
if (-not ($Process.HasExited)) {
Write-Host " Physical memory usage: $($Process.WorkingSet64)"
Write-Host " Base priority: $($Process.BasePriority)"
Write-Host " User processor time: $($Process.UserProcessorTime)"
Write-Host " Privileged processor time: $($Process.PrivilegedProcessorTime)"
Write-Host " Total processor time: $($Process.TotalProcessorTime)"
Write-Host " Page Memory Size: $($Process.PagedMemorySize64)"
if ($Process.Responding) {
Write-Host " Status = Running"
} else {
Write-Host " Status = Not Responding"
}
}
$LastReport = Get-Date
}
}
}但当我运行脚本时,我一遍又一遍地得到相同的结果:
Physical memory usage: 8605696
Base priority: 8
User processor time: 00:00:00.0624004
Privileged processor time: 00:00:00.0624004
Total processor time: 00:00:00.1248008
Page Memory Size: 3653632
Status = Running
Physical memory usage: 8605696
Base priority: 8
User processor time: 00:00:00.0624004
Privileged processor time: 00:00:00.0624004
Total processor time: 00:00:00.1248008
Page Memory Size: 3653632
Status = Running我如何向我的代码添加函数,以确保进程实际上正在运行而不是停滞。
注意,这个脚本是远程运行的,我依靠返回的stdout内容来监视我的可执行文件的运行。
发布于 2014-07-19 12:45:24
我不确定这就是答案,但现在评论太久了。
你轮询你的进程的方式不是很好。您的while循环总是在运行,消耗处理器。尽管使用两分钟的测试时间,只需使用开始-睡眠(120)即可。使用Start-Process CmdLet让你的代码接缝工作。
这可以很好地工作,只需在cmd.exe中从系统根目录启动一个dir /s来测试:
$process = Start-Process cmd.exe -PassThru
$Process.WaitForExit(1)
while (-not $Process.HasExited )
{
Start-Sleep (3)
Write-Host " Physical memory usage: $($Process.WorkingSet64)"
Write-Host " Base priority: $($Process.BasePriority)"
Write-Host " User processor time: $($Process.UserProcessorTime)"
Write-Host " Privileged processor time: $($Process.PrivilegedProcessorTime)"
Write-Host " Total processor time: $($Process.TotalProcessorTime)"
Write-Host " Page Memory Size: $($Process.PagedMemorySize64)"
if ($Process.Responding)
{
Write-Host " Status = Running"
}
else
{
Write-Host " Status = Not Responding"
}
}https://stackoverflow.com/questions/24834176
复制相似问题