给定进程名称列表,我希望这些父/子进程不会出现在调用的输出中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 "$@"
}