根据给定的父/子进程格式化 ps 输出

根据给定的父/子进程格式化 ps 输出

给定进程名称列表,我希望这些父/子进程不会出现在调用的输出中ps --forest

这将减少我在跟踪事物时需要查看的流程。

答案1

这是一个很难做到的方法:一个函数将用于pgrep返回 pid——排除 ( -v) 给定的进程名称——然后调用一个ps请求森林列表的函数。仅有的所需的 pid:

function psexclude {
  case $# in
  (0)
        printf "Usage: psexclude procname1 ...\n" >&2
        return 1
        ;;
  (*)
        str=$(IFS='|'; printf '%s' "$*")
        wanted=( $(pgrep -fv -- "$str") )
        ;;
  esac
  ps --forest -p "${wanted[@]}"
}

对于不支持数组的 shell,请考虑替代方案:

#!/bin/sh

function psexclude {
  case $# in
  (0)
        printf "Usage: psexclude procname1 ...\n" >&2
        return 1
        ;;
  (*)
        str=$(IFS='|'; printf '%s' "$*")
        set -- $(pgrep -fv -- "$str")
        ;;
  esac
  ps --forest -p "$@"
}

相关内容