首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >system.diagnostic.process刷新返回相同的过程值

system.diagnostic.process刷新返回相同的过程值
EN

Stack Overflow用户
提问于 2014-07-19 05:39:27
回答 1查看 129关注 0票数 1

我有一个运行各种可执行文件的powershell脚本。有时,一个可执行文件会运行很长时间,我希望看到一些进程统计信息,表明正在取得进展(有时没有任何进展,我需要停止当前进程并重新启动)。

我正在使用system.diagnostic.process对象来启动该进程。

代码语言:javascript
复制
   $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
            }
        }
    }

但当我运行脚本时,我一遍又一遍地得到相同的结果:

代码语言:javascript
复制
   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内容来监视我的可执行文件的运行。

EN

回答 1

Stack Overflow用户

发布于 2014-07-19 12:45:24

我不确定这就是答案,但现在评论太久了。

你轮询你的进程的方式不是很好。您的while循环总是在运行,消耗处理器。尽管使用两分钟的测试时间,只需使用开始-睡眠(120)即可。使用Start-Process CmdLet让你的代码接缝工作。

这可以很好地工作,只需在cmd.exe中从系统根目录启动一个dir /s来测试:

代码语言:javascript
复制
$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"
  }
}
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/24834176

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档