如何在Linux中获取进程的详细信息。我想要一个进程的总执行时间,内存映射。在此上下文中,该过程将是一个简单的Java程序。我只知道文件名,而不是进程ID。任何帮助将不胜感激
答案 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
,但这无济于事)
您也可以使用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
告知有关进程的信息,因此您应该了解有关它的更多信息。
答案 2 :(得分:0)
我打算使用一些内存分析工具,例如valgrid。