在 Window on top 命令中使用 FILTERING 时出现错误

在 Window on top 命令中使用 FILTERING 时出现错误

尝试过滤结果顶部命令由在窗口中过滤,按然后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然后输入COMMANDCOMMAND=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

}

就像我说的,我欢迎任何反馈。

相关内容