【发布时间】:2013-06-12 07:17:28
【问题描述】:
我有一个进程的进程 ID。能否获取有关进程的其他信息,例如 CPU%、内存、exe 名称等?
我已经看到没有内置函数可以获取所有这些。如何用 Native 做到这一点?
请帮忙。
【问题讨论】:
-
不通过 Java API。您将需要 JNI/JNA(本机)解决方案
我有一个进程的进程 ID。能否获取有关进程的其他信息,例如 CPU%、内存、exe 名称等?
我已经看到没有内置函数可以获取所有这些。如何用 Native 做到这一点?
请帮忙。
【问题讨论】:
嗯,您可以从操作系统获得所有这些信息。例如,Windows 中的任务管理器。
Java 可以为您提供例如线程转储:
%JAVA_HOME%/bin/jstack.exe PID >stack.txt
或者,堆转储:
%JAVA_HOME%/bin/jmap.exe -dump:format=b,file=heap.bin PID
【讨论】:
Java 是一个独立于平台的平台。它的规范没有定义任何关于 pid 的内容。所以你找不到一种通用/便携的方式来操作 pid。虽然这不是一个好的做法,但您可以针对特定平台进行实施。
在 Windows 上,您可以使用 tasklist 获取 PID 的完整列表并筛选出您想要的。
在 Unix/Linux 系统上,您可以使用ps ax | grep 获取您的信息。
【讨论】:
据我所知,Java 内置没有为此公开的 API:
但您可以将 java 与 OS 本机命令结合使用来获取信息。
例如
Windows 探索(任务列表):http://msdn.microsoft.com/en-us/library/windows/hardware/ff545415(v=vs.85).aspx
Unix 探索(ps):Shell script to get the process ID on Linux
【讨论】: