尝试过滤结果顶部命令由在窗口中过滤,按然后o
输入过滤器,如此处教程中所述:http://man7.org/linux/man-pages/man1/top.1.html
但是当我输入例如COMMAND=iTerm2
或任何其他命令时,我会收到invalid order
错误。
您可以在此处查看有问题的动画 gif:https://i.stack.imgur.com/Qhhtl.jpg
- 操作系统:Mac OS Catalina 版本:10.15.2
答案1
o
过滤器没有打开BSD 顶部,这是一种。
o Change the order in which the display is sorted. The sort key
names include cpu, res, size, time. The default is cpu.
我不确定是否有办法按照您想要的方式过滤它。
所以你可以按o
然后输入COMMAND
但COMMAND=iTerm2
无效。
或者,您可以top
使用-pid
过滤掉单个 pid 的选项来运行,但 iTerm2 可能正在运行多个进程。
top -pid $(pgrep iTerm2 | head -1)
答案2
在 Mac 终端 Zsh 上,top 命令与传统的 Linux 实现有很多差异,正如 OP 的问题所例证的那样。我找到了一个过滤所有 iTerm2 进程的好解决方案:
top -pid $(pgrep -d " -pid " iTerm2)
返回 pid 列表,并以-pid
标志作为分隔符。第一个-pid
标志覆盖了裸露的初始 pid。
编辑:我想让自己更容易地利用这种方法,所以我创建了一个 zsh 函数topg
。我欢迎对我的 shell 脚本的任何反馈。它本质上是一个围绕 top 的包装器,添加了标志 [-g|--grep]。我会在完善它时发布更新。
至于用法,您可以传递由空格分隔的不同进程名称的字符串,也可以将多个标志附加在一起。 top 将响应的任何其他命令都会被传递。
用法示例:
topg -g ssh --grep firefox -g "WindowServer Gitify"
function topg () {
emulate -L zsh
zmodload zsh/zutil || return
# Default option values can be specified as (value).
local help filter_commands
zparseopts -D -F -K -a -- \
{h,-help}=help \
{g,-grep}+:=filter_commands || return
if (( $#help )); then
local top_help=`top -h`
local lines
lines=( ${(f)top_help} )
lines[1]=${lines[1]:gs/top/tops}
lines[3]=(${lines[3]}, "$(echo "\t\t")[-g <pattern> [<pattern2>] | --grep <pattern> [<pattern2>]]")
print -rC1 -- \
${(F)lines}
return
fi
if (( $#filter_commands )); then
local -a array
local flag vals
for flag vals in "${(@)filter_commands}"; do
array+=(${=vals})
done
eval "top -pid $(pgrep -d " -pid " "${(@)array}") "${@:1}""
return
else
eval "top "${@:1}""
return
fi
}
就像我说的,我欢迎任何反馈。