Formatando saída do ps com base em processos pais / filhos

0

Dada uma lista de nomes de processos, quero que esses processos pai / filho não apareçam na saída de uma chamada ps --forest .

Isso reduzirá os processos que preciso analisar quando estiver acompanhando as coisas.

    
por lukemk1 08.11.2018 / 17:50

1 resposta

1

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 "$@"
}
    
por 08.11.2018 / 18:53