Limit the output of the TOP command to a specific process name

后端 未结 17 2638
臣服心动
臣服心动 2020-12-12 09:48

If you call the top command, you get all the running processes. But how can I limit the output only to a certain process name like \"java\"?

I\'ve

17条回答
  •  北海茫月
    2020-12-12 10:05

    I came here looking for the answer to this on OSX. I ended up getting what I wanted with bash and awk:

    topfiltered() {
      [[ -z "$1" ]] && return
      dump="/tmp/top_dump"
      rm -f "$dump"
      while :; do
        clear
        [[ -s "$dump" ]] && head -n $(( $LINES - 1 )) "$dump"
        top -l 1 -o cpu -ncols $(( $COLUMNS / 8 )) | awk -v p="$(pgrep -d ' ' $@)" '
            BEGIN { split(p, arr); for (k in arr) pids[arr[k]]=1 }
            NR<=12 || ($1 in pids)
        ' >"$dump"
      done
    }
    

    I loop top in logging mode and filter it with awk, building an associative array from the output of pgrep. Awk prints the first 12 lines, where line 12 is the column headers, and then every line which has a pid that's a key in the array. The dump file is used for a more watchable loop.

提交回复
热议问题