在Linux中获取用户进程的执行时间

时间:2012-07-18 10:20:23

标签: java linux

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

3 个答案:

答案 0 :(得分: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和时间列
  • /proc/$pid/maps :访问包含内存映射的proc文件

答案 1 :(得分: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告知有关进程的信息,因此您应该了解有关它的更多信息。

答案 2 :(得分:0)

我打算使用一些内存分析工具,例如valgrid。