2
respostas

Mãos à obra: Listando os nomes dos processos

Resultado foi a impressão dos nomes do dez primeiros processos em ordem decrescente de gasto de memória

processos=$(ps -e -o pid --sort -size | head -n 11 | grep [0-9])
for pid in $processos
do
    echo $(ps -p $pid -o comm=)
done
2 respostas

Olá, Henrique!

Pelo que entendi, você executou o script e obteve a impressão dos nomes dos dez primeiros processos em ordem decrescente de gasto de memória, correto? Isso é exatamente o que o script deveria fazer, então parece que tudo está funcionando corretamente.

Vamos entender um pouco mais sobre o que cada parte do script faz:

  1. processos=$(ps -e -o pid --sort -size | head -n 11 | grep [0-9]): Aqui estamos listando todos os processos em execução com ps -e, em seguida, estamos pegando somente a coluna de IDs de processo com -o pid, ordenando-os pelo tamanho de memória com --sort -size. Depois, estamos pegando somente os primeiros 11 processos com head -n 11 e finalmente estamos filtrando para remover quaisquer linhas que não contêm números com grep [0-9]. O resultado disso é armazenado na variável processos.

  2. No loop for, estamos iterando sobre cada ID de processo em processos e, para cada um, estamos imprimindo o nome do processo com echo $(ps -p $pid -o comm=).

Então, se você está vendo os nomes dos dez primeiros processos em ordem decrescente de gasto de memória, o script está funcionando como esperado. Parabéns continue assim.

Espero ter ajudado e bons estudos!

Eu gostaria de saber também se é possível pegar as informações mais de uma por vez, no caso estamos pegando apenas o pid, mas poderíamos pegar o pid e o nome do processo sem o $(ps -p $pid -o comm=). Usando o mesmo argumento do $(ps -e -o pid --sort -size).