Como posso contar o número de processos adormecidos no meu sistema?

7

Como posso contar o número de processos adormecidos usando um script de shell?

    
por aeomey amani 28.12.2016 / 12:45

3 respostas

8

Explicação estendida ... confiando em você para absorver tudo, já que é sua lição de casa ...

Listar processos com o comando ps

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

Oh, isso mostra apenas os processos da sessão atual. Queremos mostrar todos os processos no sistema. Para isso, podemos usar o -e flag

$ 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]

mas como mostramos quais estão dormindo?

Você pode usar a opção -l ou u . Isso fornece mais detalhes, incluindo o estado do processo. Os processos de suspensão têm uma letra S ou D na coluna STAT

de man ps

  

CÓDIGOS DO ESTADO DO PROCESSO          Aqui estão os valores diferentes que os especificadores de saída s, stat e state (cabeçalho "STAT" ou "S") exibirão para descrever o estado   de um          processo:

           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

Podemos formatar a saída ps para mostrar APENAS os estados, para facilitar a contagem:

ps -e -o state

aqui usamos -e para obter todos os processos e o sinal -o , seguido pelo tipo de saída que queremos. Este comando produz apenas a letra de estado. Podemos então canalizar (usando | ) essa saída para grep para contar as linhas com S ou D , os processos de suspensão:

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

grep procura por texto. A opção -c diz para contar apenas correspondências em vez de gerar o próprio texto encontrado. A opção -E informa grep para usar a regex estendida, para que possamos usar os caracteres | para corresponder à coisa OR usando a expressão: thing|stuff . Ao usar o regex, use aspas simples para evitar expansões pelo shell.

    
por Zanna 28.12.2016 / 13:05
5

Muito fácil se você souber que o comando ps envia status para processos inativos como S para suspensão interrompível e D para suspensão ininterrupta, e você pode usar -o s flag para encontrar o estado deles. Agora tudo o que você precisa fazer é executar a saída por meio de grep , que contará as ocorrências desses sinalizadores. Assim:

$ ps -e -o s | grep -o 'S\|D' -c                                                                                         
260
    
por Sergiy Kolodyazhnyy 28.12.2016 / 12:55
0

O utilitário top fornece o número de tarefas, mostrando quantas estão em execução e quantas estão em repouso. É claro que isso muda a cada momento, mas também a saída de qualquer um desses exemplos. Como acontece com qualquer utilitário * nix, a página man dará mais detalhes.

    
por DukeW 30.12.2016 / 22:57