Как я могу подсчитать количество спальных процессов в моей системе?

7

Как подсчитать количество спальных процессов с помощью сценария оболочки?

    
задан aeomey amani 28.12.2016 в 11:45
источник

3 ответа

8

Расширенное объяснение ... доверяю вам принять все это, поскольку это ваша домашняя работа ...

Перечислить процессы с помощью команды ps

$ ps
  PID TTY          TIME CMD
 4879 pts/3    00:00:00 bash
 5003 pts/3    00:00:00 ps

О, это показывает только процессы текущего сеанса. Мы хотим показать все процессы в системе. Для этого мы можем использовать флаг -e

$ ps -e
  PID TTY          TIME CMD
    1 ?        00:00:05 systemd
    2 ?        00:00:00 kthreadd
    3 ?        00:00:00 ksoftirqd/0
[and many more lines]

, но как мы покажем, с кем спать?

Вы можете использовать опцию -l или u . Это дает более подробную информацию, включая состояние процесса. У спальных процессов есть символ S или D в столбце STAT

из man ps

  

ГОСУДАРСТВЕННЫЕ КОДЫ ПРОЦЕССА          Вот разные значения, которые будут отображать спецификаторы вывода s, stat и state (заголовок «STAT» или «S») для описания состояния   из          Процесс:

           D    uninterruptible sleep (usually IO)
           R    running or runnable (on run queue)
           S    interruptible sleep (waiting for an event to complete)
           T    stopped by job control signal
           t    stopped by debugger during the tracing
           W    paging (not valid since the 2.6.xx kernel)
           X    dead (should never be seen)
           Z    defunct ("zombie") process, terminated but not reaped by its parent

Мы можем отформатировать выход ps , чтобы показывать ТОЛЬКО состояния, чтобы их было проще подсчитать:

ps -e -o state

здесь мы используем -e , чтобы получить все процессы и флаг -o , а затем тип требуемого результата. Эта команда выводит только букву состояния. Затем мы можем передать (используя | ) этот результат в grep для подсчета строк с S или D , спящими процессами:

ps -e -o state | grep -cE 'S|D'

grep выполняет поиск текста. Опция -c указывает, что она учитывает только совпадения вместо вывода самого найденного текста. Опция -E сообщает grep использовать расширенное регулярное выражение, так что мы можем использовать символы | для соответствия вещи ИЛИ с помощью выражения: thing|stuff . При использовании регулярных выражений используйте одинарные кавычки для предотвращения расширений оболочкой.

    
ответ дан Zanna 28.12.2016 в 12:05
источник
5

Очень просто, если вы знаете, что команда ps выводит статус спальных процессов как S для прерывания сна и D для бесперебойного сна, и вы можете использовать флаг -o s , чтобы найти состояние этих. Теперь все, что вам нужно сделать, - запустить выход через grep , который будет считать вхождения этих флагов. Например:

$ ps -e -o s | grep -o 'S\|D' -c                                                                                         
260
    
ответ дан Sergiy Kolodyazhnyy 28.12.2016 в 11:55
источник
0

Утилита top предоставляет количество задач, показывает, сколько из них работает, и сколько спать. Конечно, это меняется на мгновение, но так же будет выход любого из этих однострочных. Как и в любой утилите * nix, страница man даст более подробную информацию.

    
ответ дан DukeW 30.12.2016 в 21:57
источник

Ознакомьтесь с другими вопросами по меткам