如何获取 Linux 中进程的详细信息。我想要一个进程的总执行时间,内存映射。在这种情况下,该过程将是一个简单的 Java 程序。我只知道文件名,不知道进程ID。任何帮助将不胜感激
问问题
2417 次
3 回答
2
如果该进程尚未运行,time
则将打印总执行时间。该名称既有 bash 内置命令,也有独立命令,但行为有所不同。但是,正如您提到的内存映射表明一个已经在运行的进程,我将专注于这一点。
您可以使用ps -C java
. 如果您想知道该 java 二进制文件正在运行什么,您可以执行以下操作来查找 pid:
ps -C java -o pid,time,cmd | awk '/foo\.jar/{print $1,$2}' | \
while read pid time; do
echo "PID $pid, TIME $time"
cat /proc/$pid/maps
echo ""
done
如果您不喜欢输出格式,请将循环替换为其他内容。
这是这样做的:
-C java
:查找java进程-o pid,time,cmd
:打印这些字段/foo\.jar/
:只取包含该正则表达式的行print $1,$2
:打印 pid 和 time 列/proc/$pid/maps
:访问包含内存映射的 proc 文件
于 2012-07-18T10:52:10.467 回答
0
我打算使用一些内存分析工具,例如 valgrid。
于 2012-07-23T03:53:22.070 回答
0
如果您只知道程序名称而不知道进程 ID,则首先必须找出哪些进程(它们可以是许多进程)正在运行该程序。
假设程序名称为:您可以使用例如以下一些命令来找出答案progname
:
ps auxw | grep progname
pidof progname
pgrep progname
(请注意,如果您使用 JVM 来运行一些 Java 程序,那么progname
总是java
没有多大帮助)
您也可以使用top
或htop
一旦你得到一个有趣的 pid,例如 1234,你就可以得到更多关于该进程的信息,例如:
ps -lw 1234
cat /proc/1234/status
cat /proc/1234/stat
cat /proc/1234/stack
cat /proc/1234/maps
cat /proc/1234/smaps
还要查看/proc/1234/
诸如此类的其他文件和目录/proc/1234/fd/
。
Linux 内核通过传递有关进程的信息,/proc
因此您应该了解更多有关它的信息。
于 2012-07-18T10:29:05.103 回答