Linux

根據給定的父/子程序格式化 ps 輸出

  • November 21, 2018

給定程序名稱列表,我希望這些父/子程序不會出現在ps --forest呼叫的輸出中。

這將減少我在跟踪事物時需要查看的流程。

這是一個很難做到的方法:一個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 "$@"
}

引用自:https://unix.stackexchange.com/questions/480604