1

如何获取 Linux 中进程的详细信息。我想要一个进程的总执行时间,内存映射。在这种情况下,该过程将是一个简单的 Java 程序。我只知道文件名,不知道进程ID。任何帮助将不胜感激

4

3 回答 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没有多大帮助)

您也可以使用tophtop

一旦你得到一个有趣的 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 回答