У меня есть панель PHP, которая была перенесена из окна Linux в окно Windows. На панели он показывает время работы определенного процесса, чтобы дать знать пользователю, как долго работает программа в системе. В Linux это было легко, потому что я мог просто передать и переопределить PS Aux с некоторыми флагами, чтобы вывести время. Однако в Windows я не могу понять, как это сделать. Я использую эту команду для вывода информации о программе, думая, что процессорное время будет тем, что я хочу: tasklist /fi "imagename eq program.exe" /v

Как выясняется, время ЦП показывает, сколько времени процесс работал на всех без исключения ЦП, что, конечно, может сильно отличаться от реального времени, в зависимости от того, сколько потоков запущено в данный момент времени в процессе.

Итак, как я могу использовать CMD для вывода времени выполнения процесса в реальных условиях?

1 ответ1

4

Как я могу получить время выполнения процесса в реальных условиях?

Предположение:

  • Под "условиями реального мира" вы на самом деле подразумеваете прошедшее время

Есть две возможности:


решение pslist

Используйте pslist из Windows SysInternals.

Пример вывода для 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

Используйте следующий пакетный файл (example.cmd) для очистки вывода:

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

Выход:

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

F:\test>

Решение PowerShell

Используйте следующий скрипт 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)

Пример вывода для notepad++:

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

отказ

Я никак не связан с pslist , я всего лишь конечный пользователь программного обеспечения.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .