Определить время работы процесса

Есть ли способ определить "время работы" процесса в Windows. Разочарован, обнаружив, что это не один из атрибутов, доступных при использовании диспетчера задач.

7 ответов

Решение

Вы можете увидеть это с помощью Process Explorer. В меню панели задач выберите View и проверить Show Process Tree и Show Lower Pane опции. Щелкните правой кнопкой мыши по любому столбцу и Select Columns, теперь нажмите на Process Performance вкладку и проверьте Start Time коробка.

Это можно сделать с помощью Powershell.

Запустите его как администратор, а затем выполните

Get-Process | выберите имя, время начала

Вы получите список всех запущенных процессов и время их запуска.

Ссылка от: http://blogs.technet.com/b/heyscriptingguy/archive/2012/11/18/powertip-use-powershell-to-easily-see-process-start-time.aspx

Если вы находитесь на сервере, где вы не можете установить какой-либо внешний инструмент, вы все равно можете:

  1. Откройте диспетчер задач
  2. Нажмите на вкладку процесса
  3. Найдите свой процесс
  4. Щелкните по нему правой кнопкой мыши
  5. Выберите опцию Свойства

Вы можете увидеть "дату создания", которая должна быть датой создания вашего процесса. С помощью простого вычитания вы можете определить время безотказной работы.

В CMD вы можете использовать стандартную утилиту командной строки Windows Management Instrumentation (WMIC), чтобы получить время запуска процесса:

wmic process where Name="<process name>" get CreationDate

или же

wmic process where ProcessID="<PID>" get CreationDate

Вы получите такую ​​дату и время: 20201021010512.852810+180.
Формат: YYYYMMDDHHMMSS.ssssss+MMM(UTC offset)

Если вам нужно более читаемое представление, вам нужно подготовить его с помощью скрипта. Вот для этой цели я написал небольшой пакетный скрипт:

@ECHO OFF
SETLOCAL

IF [%1]==[] (
    ECHO Prints process creation date in ISO format. 
    ECHO:
    ECHO USAGE: %~n0 ^<PID or Process name^>
    EXIT /B 1
)

IF [%~x1]==[.exe] (SET type=Name) ELSE (SET type=ProcessID)

FOR /F "tokens=1,2 delims==" %%a IN ('wmic process where %type%^="%~1" get CreationDate /value') DO (
    IF [%%a]==[CreationDate] SET proc_cd=%%b
)

IF DEFINED proc_cd (
    ECHO %proc_cd:~0,4%-%proc_cd:~4,2%-%proc_cd:~6,2%T%proc_cd:~8,2%:%proc_cd:~10,2%:%proc_cd:~12,2%
)

Введите в него PID или имя процесса, оканчивающееся на.exe, и он будет выводиться при запуске процесса. Предостережение: если существует много процессов с одинаковым именем, он будет выводить время только для последнего запущенного.

Откройте диспетчер задач и щелкните правой кнопкой мыши по процессу. Выберите «Свойства» в меню и посмотрите на поле «Доступ» на первой вкладке. Если не было запущено несколько экземпляров, это даст вам время начала процесса.

С помощью PID из диспетчера задач вы можете использовать следующую команду Powershell с подразумеваемым -End (Get-Date):

New-Timespan -Start (Get-Process -Id PID).StartTime

Может быть, вы можете попробовать procxp http://technet.microsoft.com/en-us/sysinternals/bb896653

Другие вопросы по тегам