是否有可能从不基于系统时钟设置的 Windows 进程中获取正常运行时间?
基于 Linux 的解决方案类似于:
ps -eo comm,etime
经过一番研究,我在 Windows 上尝试了一些方法,但没有找到我期望的结果。例如,使用:
New-TimeSpan -Start (get-process explorer).StartTime
在 PowerShell 中,我得到了这个:
我的问题是时间基于创建日期,因此如果由于任何原因更改时钟设置,结果将会改变:
(顺便说一句,我喜欢负正常运行时间)
我也查看了 wmic,问题是一样的:
WMIC PROCESS GET NAME, CREATIONDATE
是否有一个字段或选项可以获取像 etime 这样的挂钟时间信息?
谢谢
答案1
是否有可能从不基于系统时钟设置的 Windows 进程中获取正常运行时间?
Cygwinps
忽略当前时间的改变。
退税:
- STIME 字段以 hh:mm:ss 格式显示开始时间,因此您无法知道它已经运行了多少天。
示例输出(更改日期之前):
DavidPostill@Hal ~
$ date
Fri, Jul 17, 2015 9:59:11 AM
DavidPostill@Hal ~
$ ps -e -W -p 2612
PID PPID PGID WINPID TTY UID STIME COMMAND
2612 0 0 2612 ? 0 16:51:33 C:\Windows\explorer.exe
示例输出(更改日期后):
DavidPostill@Hal ~
$ date
Fri, Jul 17, 2015 11:59:29 AM
DavidPostill@Hal ~
$ ps -e -W -p 2612
PID PPID PGID WINPID TTY UID STIME COMMAND
2612 0 0 2612 ? 0 16:51:33 C:\Windows\explorer.exe
的值STIME
保持不变 -16:51:33
笔记:
16:51:33
是我昨天重启机器的时间。- 该
STIME
字段以格式显示开始时间hh:mm:ss
,因此您无法知道它已经运行了多少天。
Cygwin ps 缺少选项 -o 来格式化输出
Cygwin 使用自定义的 ps 程序,该程序也可以处理 Windows 进程,但不支持所有这些选项。
但是,procps
支持-o
。
缺点:
- STIME 字段以 hh:mm:ss 格式显示开始时间,因此您无法知道它已经运行了多少天。
- 它不处理 Windows 进程。