Aqui está uma maneira difícil de fazê-lo: uma função que usará pgrep
para retornar pids - excluindo ( -v
) os nomes de processos dados - seguido por uma chamada ps
que solicita uma listagem de floresta somente os pids desejados:
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[@]}"
}
Para um shell sem suporte à matriz, considere uma alternativa:
#!/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 "$@"
}