Como obter o resumo da tarefa do sistema fornecido pelo topo sem usar o topo?

1

top exibe esses números em seu resumo:

Tarefas: 193 no total, 1 corrida, 192 dormindo, 0 parado, 0 zumbi

Estou procurando uma maneira de obtê-los de outra maneira - executando um programa, analisando um arquivo / proc.

Você conhece uma maneira de obter esses números?

O mais próximo que consegui foi:

pgrep "" -c
192

e top & pgrep:

top -b -n 1 | head -n 2 | tail -n 1; pgrep "" -c

nunca concorda ...

por exemplo. 194 vs 191

grep 'procs' /proc/stat
procs_running 2
procs_blocked 0

E uma menção de correr, dormir, parar, zumbi aqui: link

Este grep transformou-se num jogo, o sono é 192:

 grep -R sleeping /proc/*/status | wc -l

mas sua maneira de fazer o modo de dormir e o modo de fazer do pgrep não aumentam:

top -b -n 1 | head -n 2 | tail -n 1; pgrep "" -c; grep "procs" /proc/stat; grep -R sleeping /proc/*/status | wc -l
    
por iletras 24.11.2017 / 08:12

2 respostas

0

 ps -eo stat | awk '/^S/ { stat+=1 } /^R/ { run +=1 } /^Z/ { zomb+=1 } { tot+=1 } END { print "sleeping = "stat" Running = "run" Zombie = "zomb" total = "tot }'

Isso fornecerá as mesmas informações sobre as informações do estado do processo.

R estará executando processos, S estará dormindo e zumbi.

Tenha em mente que o topo sempre mostrará mais um processo em execução, pois ele levará em consideração a execução real do topo.

    
por 24.11.2017 / 10:19
0

Com algumas exceções, o ps retorna as respostas corretas.

local output=$(ps axo stat=)

cpu_tasks_running=$(echo -e "${output}" | grep -c  '^R')

cpu_tasks_sleeping=$(grep sleeping /proc/*/status | wc -l)
  # searching /proc gets better results than searching ps output:
  # cpu_tasks_sleeping=$(echo -e "${output}" | grep -cE '^D|^S')

cpu_tasks_stopped=$(echo -e "${output}" | grep -ci '^T')
cpu_tasks_zombie=$(echo -e "${output}" | grep -c  '^Z')

cpu_tasks_total=$(($cpu_tasks_running + $cpu_tasks_sleeping))
  # counting ps total lines never matched ps running + ps sleeping, nor top
  # replaced with math: ps running + ps sleeping
  # cpu_tasks_total=$(echo -e "${output}" | wc -l)
    
por 24.11.2017 / 12:09