top 是否有相对简单的选项来跟踪特定流程?
理想情况下,通过人类可读的值来识别流程?例如chrome
或java
。
换句话说,我想查看顶部提供的所有典型信息,但要将结果过滤为提供的参数,即。 “chrome”或“java”
答案1
来自我的另一个答案这里,你可以做类似的事情,
top -p `pgrep "java"`
答案2
你可以简单地使用grep
:
NAME
grep, egrep, fgrep, rgrep - print lines matching a pattern
SYNOPSIS
grep [OPTIONS] PATTERN [FILE...]
grep [OPTIONS] [-e PATTERN | -f FILE] [FILE...]
DESCRIPTION
grep searches the named input FILEs (or standard input if no files are named, or if a single
hyphen-minus (-) is given as file name) for lines containing a match to the given PATTERN. By
default, grep prints the matching lines.
运行以下命令以获得您想要的输出(ex-chrome):
top | grep chrome
这里我们使用grep
管道,|
所以top
&grep
并行运行;top
输出给grep
(作为输入)并grep chrome
过滤匹配行chrome
直到top
停止。
答案3
top -p `pgrep -d "," java`
解释:
top -p pid1,pid2
:显示多个进程信息,pid之间用逗号分隔,
pgrep -d "," java
:打印所有java程序的pid,pid默认以换行符分隔。根据顶部的要求,使用-d ","
来分隔它。,
如果您看到类似 的错误top: -p argument missing
,则意味着没有 java 程序正在运行,即 pgrep 没有输出。
答案4
已经提供了其他很好的答案,但我前段时间制作了一个脚本,我将其命名为 ptop,它对我很有用:
#!/bin/sh
top -p $(pidof "$@" |sed s#\ #,#g) 2>/dev/null
if [ $? -ne 0 ]; then
echo No processes with the specified name\(s\) were found
fi
这支持指定多个进程名称(如ptop bash chrome
),并在没有运行任何指定名称的进程时提供更好的错误消息。