Aplicar filtros superiores em modo lote

Aplicar filtros superiores em modo lote

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 -popção de linha de comando pode ser usada para restringir quais processos topserã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. psgera a lista de detalhes do processo, o awkcomando os filtra e sortapenas remove duplicatas.

Para seu uso, verifique quais colunas psvocê 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 awkcomando conforme necessário para corresponder ao filtro necessário. Observe que $6aparece 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.

informação relacionada