Em vez de analisar a saída de ps
, personalize-a ao seu gosto.
Se as opções de filtragem de ps
forem suficientes para mostrar exatamente o conjunto de processos que você deseja eliminar, especifique -o pid=
para mostrar apenas a coluna PID, sem linha de cabeçalho.
ps … -o pid=
1234
56789
Como a saída contém apenas dígitos e espaço em branco, você pode usá-la diretamente em uma substituição de comando:
kill $(ps … -o pid=)
Se você precisar de mais processamento, use -o
para selecionar as colunas e a ordem desejada. Veja o manual ps
em seu sistema para os nomes das colunas suportadas; POSIX especifica alguns. Adicione um =
após cada coluna para suprimir a linha de cabeçalho.
kill $(p=$(sh -c 'echo $PPID');
ps -o pid= -o ppid= -o tty= -o comm= |
awk -v "tty=${TTY#/dev/}" -v o=$$ -v p=$p '
$1 != o && $1 != p && $2 != p && $3 == tty && $4 != "sh" {print $1}
')