监控 Windows 上某个进程的挂钟时间?

监控 Windows 上某个进程的挂钟时间?

Windows 任务管理器能够显示 Windows 上任何给定正在运行的进程的当前 CPU 时间,有没有什么方法(不一定通过任务管理器)来获取进程的当前挂钟时间?

举个例子,假设我有一个脚本,可以可靠地运行大约 45 分钟。如果不给脚本添加进度条,有什么方法可以确定它已经运行了多长时间吗?

这背后的数学原理看起来相当简单;

墙壁时间 = 当前墙壁时间 - 墙壁时间过程开始时间。

同样,由于数学如此简单,有没有办法获取某个进程的启动时间?

答案1

当然。总运行时间可通过注册表的性能部分和 Toolhelp API 获得。当然,如果您有运行时间和当前时间,则可以计算开始时间。

有两种方法可以通过 Win32 检索信息,但都不是特别简单。自 WinNT 最早版本以来就支持的方法是使用 RegQueryValueEx 首先解析 HKEY_PERFORMANCE_DATA 中可用的计数器列表,然后检索感兴趣的进程实例上所需的计数器。一种较新的方法是使用CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS),它是随 WinXP 引入的。

可能有很多应用程序可以做到这一点,所以你邀请了一个我相信其他人可以添加的列表。以下是我在我的C 壳. ps -s列出所有系统进程。示例实用程序根据空闲进程uptime报告的运行时间计算系统已运行的时间。ps -s

Hamilton C shell ps 实用程序报告系统进程的运行时间

(空闲的活动时间只是Win7报告的奇数值。)

答案2

如果你愿意/能够使用 Python,那么有一个叫做psutil这可能会奏效。或者,您可以下载其源代码并查看它使用哪些 Windows API 调用来提供信息。

相关内容