Isso não responde à sua pergunta,
mas resolve o problema que você está tentando resolver, de uma maneira completamente diferente:
O comando completo é este (veja abaixo, por exemplo, saída):
ps -o comm,%cpu,%mem --sort -%cpu -A | head -6
Vou descrever as partes:
- usando
ps
para ter mais controle sobre a saída - Imprimindo apenas as três colunas que precisamos com
-o comm,%cpu,%mem
- Faça
ps
classificar os dados internamente--sort -%cpu
, pela CPU, reversa. - Listar todos os processos com
-A
- Mostrar o cabeçalho e as 5 primeiras linhas do resultado por
| head -6
A saída é semelhante à saída do seu primeiro comando:
$ ps -o comm,%cpu,%mem --sort -%cpu -A | head -6
COMMAND %CPU %MEM
firefox 8.9 15.5
Xorg 1.3 5.6
parcellite 0.3 1.6
compiz 0.2 1.8
konsole 0.1 0.9
O processo ps
está listado na lista completa - pode ser excluído com base no PID pai.
Se quisermos excluir top
dos processos em outro lugar, podemos fazer isso com base no nome do comando.
O -A
selecionando todos os processos seria substituído por -N ...
:
ps ... -N --ppid $$ -C top
Como agora precisamos excluir processos, usamos -N
para selecionar todos os outros processos do que os que combinamos.
Para excluir ps
, usamos que ele tem o shell interativo atual como processo pai, então ele terá o pid pai, PPID do shell. O PID do shell atual é $$
.
Portanto, --ppid $$
corresponde a todos os processos filhos do shell atual e sabemos que haverá apenas um, ps
.
Também queremos excluir os processos top
que podem ser executados em outras exibições na mesma máquina. Fazemos isso combinando o nome do comando com -C top
.
O comando completo com a exclusão do processo ps
em si (e somente isso) e todos os processos top
seria:
ps -o comm,%cpu,%mem --sort -%cpu -N --ppid $$ -C top | head -6