
Posso aplicar o modo interativo dos filtros desejados (pressionando o). Existe uma maneira de obtê-los em modo lote.
Estou usando o procps-ng versão 3.3.10. Obrigado.
Responder1
De acordo coma página de manual, a -p
opção de linha de comando pode ser usada para restringir quais processos top
serão lidos. Parece não permitir a filtragem exatamente como no modo interativo, mas você pode obter essencialmente o mesmo resultado examinando a saída de ps
.
Exemplo, pegando apenas processos com mais de três threads:
$ ps -eLf | awk '$6 ~ /^[0-9]+$/ { if ($6 > 3) { print $2; } }' | sort -u
No meu computador, isso imprime uma lista de todos os processos relevantes, um em cada linha. ps
gera a lista de detalhes do processo, o awk
comando os filtra e sort
apenas remove duplicatas.
Para seu uso, verifique quais colunas ps
você vai precisar. No meu computador, o número de threads ("NLWP") é a sexta coluna ( $6
) e o ID do processo ("PID") é a segunda coluna ( $2
). Ajuste-os no awk
comando conforme necessário para corresponder ao filtro necessário. Observe que $6
aparece duas vezes: primeiro para ter certeza de que é um número e não o cabeçalho, e a segunda vez para ter certeza de que é maior que 3.
Depois de executar este comando, os IDs do processo devem ser fornecidos a top
. Bash e provavelmente outros shells permitem passar a saída de um programa como argumentos para outro programa, então o comando final poderia ser
$ top $(ps -eLf | awk '$6 ~ /^[0-9]+$/ { if ($6 > 3) { print "-p"$2; } }' | sort -u) ... And other options
"-p"
foi adicionado para fazer a saída funcionar com top
. Ajuste este comando para ajustar seu filtro e shell conforme necessário, coloque-o em seu lote e ele deve funcionar.
Nota: Adicionar mais filtros provavelmente exigirá o aprendizado do awk. Não é muito difícil.