PS Equivalente de Aux para Windows?

0

Eu tenho um painel PHP que foi portado de uma caixa linux para uma caixa do windows. No painel, ele mostra o tempo de atividade de um processo específico para permitir que o uso saiba quanto tempo o programa no sistema está sendo executado. No linux, isso era fácil, porque eu poderia apenas canalizar e regexar um PS Aux com alguns sinalizadores para gerar a hora. No entanto, no Windows, não consigo descobrir como fazer isso. Estou usando este comando para gerar informações sobre o programa pensando que o Tempo de CPU seria o que eu queria: tasklist /fi "imagename eq program.exe" /v

Bem, como se vê, o tempo de CPU mede quanto tempo o processo correu em todos e quaisquer CPUs, o que naturalmente poderia ser muito diferente do tempo real, dependendo de quantos encadeamentos estão sendo executados a qualquer momento durante o processo. .

Então, como posso usar o CMD para gerar o tempo de execução de um processo em termos reais?

    
por Flynn 05.04.2016 / 17:44

1 resposta

4

Como posso obter o tempo de execução de um processo em termos reais?

Suposição:

  • Por "termos do mundo real" você realmente quer dizer Tempo decorrido

Existem duas possibilidades:

pslist solution

Use pslist de Windows SysInternals .

Exemplo de saída para o notepad ++:

F:\test>"c:\apps\WSCC\Sysinternals Suite"\pslist notepad++

pslist v1.3 - Sysinternals PsList
Copyright (C) 2000-2012 Mark Russinovich
Sysinternals - www.sysinternals.com

Process information for HAL:

Name                Pid Pri Thd  Hnd   Priv        CPU Time    Elapsed Time
notepad++          8064   8   9  508  46828     0:02:05.003   148:52:29.866

Use o seguinte arquivo em lote (example.cmd) para limpar a saída:

@echo off
setlocal enabledelayedexpansion
for /f "usebackq skip=3 tokens=8" %%i in ('pslist notepad++ 2^> nul') do (
  echo elapsed time: %%i
  )
endlocal

Saída:

F:\test>example.cmd
elapsed time: 148:54:15.628

F:\test>

Solução do PowerShell

Use o seguinte script powershell (GetProcessElapsedTime.ps1):

$ts=((get-date) - (get-process notepad++).StartTime)
$hours = ($ts.Days * 24 + $ts.Hours).ToString("00")
$minutes = $ts.Minutes.ToString("\:00")
$seconds = $ts.Seconds.ToString("\:00")
$milliseconds = $ts.Milliseconds.ToString("\.000")
Write-Output ($hours + $minutes + $seconds + $milliseconds)

Exemplo de saída para o notepad ++:

PS F:\test> .\GetProcessElapsedTime
148:54:46.667
PS F:\test>

Aviso de isenção

Eu não sou afiliado com pslist de qualquer forma, eu sou apenas um usuário final de o software.

    
por 05.04.2016 / 19:01