Как получить сводку системных задач, предоставленную top, не используя top?

Как получить сводку системных задач, предоставленную top, не используя top?

top отображает эти цифры в своей сводке:

Задания: всего 193, 1 работает, 192 спит, 0 остановлено, 0 зомби

Я ищу способ получить их другим способом — запустить программу, обработав файл /proc.

Знаете ли вы способ получить эти цифры?

Самое близкое, что мне удалось получить, это:

pgrep "" -c
192

и топ и pgrep:

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

никогда не соглашайтесь...

например 194 против 191

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

И упоминание о беге, сне, остановке, зомби здесь: http://procps.cvs.sourceforge.net/viewvc/procps/procps/top.c?revision=1.134&view=markup#l1025

Этот grep нашел совпадение, sleep — 192:

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

но его способ выполнения sleep и способ pgrep выполнить total не сходятся:

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

решение1

 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 }'

Это даст вам ту же информацию о состоянии процесса.

R будет запущенным процессом, S будет спящим процессом, а Z — зомби.

Имейте в виду, что top всегда будет показывать на один запущенный процесс больше, поскольку он будет учитывать фактическое выполнение top.

решение2

За некоторыми исключениями, ps возвращает правильные ответы.

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)

Связанный контент