Exibição de Processos Linux

LinuxBeginner
Pratique Agora

Introdução

O gerenciamento de processos é um aspecto fundamental da administração de sistemas Linux. Cada programa ou comando que você executa no Linux cria um processo, e monitorar esses processos é essencial para manter o desempenho do sistema e solucionar problemas.

Este laboratório irá guiá-lo através do domínio do comando ps, uma ferramenta poderosa para monitorar e gerenciar processos em execução em um sistema Linux. Ao entender como usar o comando ps e suas várias opções, você obterá informações valiosas sobre o que está acontecendo em seu sistema a qualquer momento.

Ao longo deste laboratório, você aprenderá como exibir processos em diferentes formatos, visualizar todos os processos do sistema e entender as informações detalhadas que o ps pode fornecer sobre cada processo.

Entendendo as Informações Básicas do Processo

No Linux, cada programa ou comando em execução é representado por um processo. Cada processo tem um identificador único conhecido como ID do Processo (PID - Process ID). O comando ps permite que você visualize esses processos e obtenha informações sobre eles.

Vamos começar explorando o uso básico do comando ps.

Comando ps Básico

  1. Abra seu terminal no ambiente LabEx. Você deve começar no diretório ~/project.

  2. Digite o seguinte comando e pressione Enter:

ps
  1. Você verá uma saída semelhante a:
  PID TTY          TIME CMD
  188 pts/0    00:00:00 zsh
  449 pts/0    00:00:00 ps

Vamos entender o que essa saída significa:

  • PID: ID do Processo, um número único atribuído a cada processo
  • TTY: Tipo de terminal, indicando em qual terminal o processo está sendo executado
  • TIME: A quantidade de tempo de CPU que o processo usou
  • CMD: O comando que iniciou o processo

Neste exemplo, você pode ver:

  • O processo do shell zsh (sua sessão de terminal atual)
  • O comando ps que você acabou de executar

O comando ps padrão mostra apenas os processos associados à sua sessão de terminal atual. Isso é útil para verificar rapidamente quais comandos você executou recentemente, mas não fornece uma imagem completa do que está acontecendo em seu sistema.

Tente executar outro comando e, em seguida, execute ps novamente para ver como a saída muda:

echo "Hello, world"
ps

Você notará que o comando echo não aparece na lista de processos. Isso ocorre porque ele iniciou e terminou tão rapidamente que não estava mais em execução no momento em que você executou o comando ps.

Visualizando Todos os Processos do Sistema

Na etapa anterior, você aprendeu que o comando ps básico mostra apenas os processos relacionados ao seu terminal atual. No entanto, um sistema Linux típico tem muitos processos em execução simultaneamente, a maioria dos quais não está diretamente relacionada à sua sessão de terminal.

Para obter uma imagem mais completa do que está acontecendo em seu sistema, você pode usar a opção -e com o comando ps.

Usando ps -e para Visualizar Todos os Processos

  1. No seu terminal, digite o seguinte comando e pressione Enter:
ps -e
  1. Você verá uma lista de processos muito mais longa, semelhante a:
  PID TTY          TIME CMD
    1 ?        00:00:00 init.sh
   22 ?        00:00:00 supervisord
   23 ?        00:00:00 sshd
   32 ?        00:00:00 dbus-daemon
   35 ?        00:00:00 xfce4-session
   ···

Esta saída mostra todos os processos em execução no sistema, não apenas aqueles associados ao seu terminal. Observe que muitos processos têm um ? na coluna TTY. Isso indica que esses processos não estão associados a nenhum terminal.

Compreendendo os Processos do Sistema

Muitos dos processos que você vê são serviços do sistema em execução em segundo plano. Por exemplo:

  • init.sh (PID 1) é o primeiro processo iniciado quando o sistema inicializa
  • supervisord é um sistema de controle de processos
  • sshd é o daemon do servidor SSH
  • dbus-daemon é o daemon do barramento de mensagens D-Bus
  • xfce4-session faz parte do ambiente de desktop Xfce

Esses processos lidam com várias funções do sistema e fornecem os serviços que tornam seu sistema Linux utilizável.

Contando o Número de Processos

Se você quiser saber quantos processos estão atualmente em execução no seu sistema, você pode canalizar a saída de ps -e para o comando wc:

ps -e | wc -l

O número exibido representa a contagem total de processos em execução no seu sistema, mais uma linha para o cabeçalho.

Exibindo Informações Detalhadas dos Processos

Agora que você pode visualizar todos os processos em execução no seu sistema, vamos aprender como obter informações mais detalhadas sobre cada processo. A opção -f para o comando ps fornece uma listagem em "formato completo" com detalhes adicionais.

Usando ps -ef para Informações Detalhadas

  1. No seu terminal, digite o seguinte comando e pressione Enter:
ps -ef
  1. Você verá uma saída semelhante a:
UID          PID    PPID  C STIME TTY          TIME CMD
root           1       0  0 16:45 ?        00:00:00 /bin/bash /etc/shiyanlou/sbin/init.sh
root          22       1  0 16:45 ?        00:00:00 /usr/bin/python3 /usr/bin/supervisord -n
root          23      22  0 16:45 ?        00:00:00 sshd: /usr/sbin/sshd -D [listener] 0 of 10-100 startups
labex        188     187  0 16:46 pts/0    00:00:00 -zsh
labex        677     188  0 16:55 pts/0    00:00:00 ps -ef

Este formato fornece informações muito mais detalhadas sobre cada processo:

  • UID: ID do Usuário do proprietário do processo
  • PID: ID do Processo
  • PPID: ID do Processo Pai (o processo que iniciou este)
  • C: Utilização da CPU
  • STIME: Hora de início do processo
  • TTY: Terminal associado ao processo
  • TIME: Tempo de CPU usado pelo processo
  • CMD: Comando completo com seus argumentos

Compreendendo as Relações entre Processos

A coluna PPID é particularmente útil para entender como os processos se relacionam entre si. Cada processo (exceto o primeiro) é iniciado por outro processo, criando uma relação pai-filho.

Por exemplo, na saída acima:

  • O processo com PID 1 (init.sh) tem um PPID de 0 (é o primeiro processo)
  • O processo com PID 22 (supervisord) tem um PPID de 1 (foi iniciado por init.sh)
  • O processo com PID 23 (sshd) tem um PPID de 22 (foi iniciado por supervisord)

Essa relação hierárquica forma uma "árvore de processos", que você pode visualizar com ferramentas especializadas como pstree (não abordado neste laboratório).

Filtrando Informações do Processo

Você pode combinar ps com grep para filtrar processos específicos. Por exemplo, para encontrar todos os processos relacionados ao shell zsh:

ps -ef | grep zsh

Isso mostrará todos os processos que têm "zsh" em seu nome de comando.

Tente pesquisar outros processos em seu sistema:

ps -ef | grep bash

Essa combinação de ps com ferramentas de filtragem o torna um comando poderoso para monitoramento e solução de problemas do sistema.

Ordenação e Opções Avançadas de Informações de Processos

Agora que você aprendeu sobre informações básicas do processo e listagens detalhadas, vamos explorar algumas opções adicionais que tornam o comando ps ainda mais útil.

Formato Personalizado com ps

O comando ps permite que você crie saídas personalizadas com informações específicas que lhe interessam. A opção -o permite que você especifique quais colunas exibir:

ps -eo pid,ppid,cmd,%cpu,%mem --sort=-%cpu

Este comando exibe:

  • ID do Processo (pid)
  • ID do Processo Pai (ppid)
  • Comando (cmd)
  • Porcentagem de uso da CPU (%cpu)
  • Porcentagem de uso da memória (%mem)

O parâmetro --sort=-%cpu classifica os processos por uso da CPU em ordem decrescente (o sinal de menos antes de %cpu indica ordem decrescente).

Você deve ver uma saída semelhante a:

  PID  PPID CMD                         %CPU %MEM
  789   788 ps -eo pid,ppid,cmd,%cpu,%  0.0  0.1
  188   187 -zsh                        0.0  0.1
   35    34 xfce4-session               0.0  0.2
   32     1 /usr/bin/dbus-daemon --sys  0.0  0.0
   23    22 sshd: /usr/sbin/sshd -D [l  0.0  0.1
   22     1 /usr/bin/python3 /usr/bin/  0.0  0.2
    1     0 /bin/bash /etc/shiyanlou/s  0.0  0.0

Encontrando Processos Intensivos em Memória

Se você deseja identificar quais processos estão usando mais memória, pode classificar por uso de memória em vez disso:

ps -eo pid,user,cmd,%mem --sort=-%mem | head -n 6

Este comando exibe os 5 principais processos que consomem memória (mais a linha do cabeçalho) com seu PID, usuário, comando e porcentagem de uso da memória.

Compreendendo os Estados do Processo

Os processos podem estar em diferentes estados. Vamos ver essa informação:

ps -eo pid,stat,cmd

A coluna STAT mostra o estado do processo usando códigos de uma única letra:

  • R: Em execução ou executável (Running or runnable)
  • S: Dormindo em uma espera interrompível (Sleeping in an interruptible wait)
  • D: Sono ininterruptível (geralmente IO) (Uninterruptible sleep (usually IO))
  • Z: Processo zumbi (Zombie process)
  • T: Parado ou sendo rastreado (Stopped or being traced)

Caracteres adicionais podem aparecer após a letra de status:

  • <: Alta prioridade (High-priority)
  • N: Baixa prioridade (Low-priority)
  • s: Líder da sessão (Session leader)
  • +: No grupo de processos em primeiro plano (In the foreground process group)

Esta informação ajuda a entender o que os processos estão fazendo em um determinado momento.

Visualização Hierárquica com pstree

Embora não faça parte do próprio comando ps, o comando pstree fornece uma representação visual da hierarquia do processo:

pstree

Isso mostra as relações entre os processos em um formato de árvore, tornando mais fácil entender como os processos estão relacionados entre si.

Monitoramento de Processos em Tempo Real

Enquanto o comando ps fornece um instantâneo dos processos em um determinado momento, às vezes você precisa monitorar os processos continuamente. Nesta etapa, exploraremos ferramentas para monitoramento de processos em tempo real.

Usando o Comando top

O comando top fornece uma visualização dinâmica em tempo real do sistema em execução. Ele exibe informações resumidas do sistema, bem como uma lista de processos ou threads atualmente gerenciados pelo kernel Linux.

Execute o seguinte comando:

top

Você verá algo como:

top - 17:15:23 up 30 min,  1 user,  load average: 0.00, 0.01, 0.05
Tasks:  31 total,   1 running,  30 sleeping,   0 stopped,   0 zombie
%Cpu(s):  0.0 us,  0.3 sy,  0.0 ni, 99.7 id,  0.0 wa,  0.0 hi,  0.0 si,  0.0 st
MiB Mem :   1975.1 total,   1558.7 free,    180.4 used,    236.1 buff/cache
MiB Swap:    975.0 total,    975.0 free,      0.0 used.   1651.3 avail Mem

  PID USER      PR  NI    VIRT    RES    SHR S  %CPU  %MEM     TIME+ COMMAND
    1 root      20   0    8988   3208   2556 S   0.0   0.2   0:00.07 init.sh
   22 root      20   0   39528   8596   6088 S   0.0   0.4   0:00.20 supervisord
   23 root      20   0   12128   6788   5864 S   0.0   0.3   0:00.00 sshd
   ...

A saída é dividida em duas partes:

  1. Resumo do sistema (5 primeiras linhas)
  2. Lista de processos (classificada por uso da CPU por padrão)

Para sair do top, pressione a tecla q.

Compreendendo a Saída do top

O resumo do sistema fornece:

  • Tempo de atividade (Uptime) e médias de carga (load averages)
  • Contagens de tarefas por estado (em execução, dormindo, parado, zumbi)
  • Detalhamento do uso da CPU
  • Uso de memória e swap

A lista de processos mostra:

  • PID: ID do Processo
  • USER: Usuário proprietário
  • PR: Prioridade
  • NI: Valor Nice
  • VIRT: Memória virtual usada
  • RES: Memória residente usada
  • SHR: Memória compartilhada
  • S: Status do processo
  • %CPU: Uso da CPU
  • %MEM: Uso da memória
  • TIME+: Tempo de CPU usado
  • COMMAND: Nome do comando

Comandos Interativos no top

Enquanto o top está em execução, você pode usar vários comandos de teclado para interagir com ele:

  • Pressione M para classificar por uso de memória
  • Pressione P para classificar por uso da CPU
  • Pressione k seguido por um PID para matar um processo
  • Pressione h para obter ajuda

Tente pressionar M enquanto executa o top para ver os processos classificados por uso de memória.

Usando o Comando watch com ps

Outra abordagem para monitoramento em tempo real é usar o comando watch com ps. Isso executa um comando periodicamente e exibe a saída, permitindo que você veja as alterações ao longo do tempo.

watch -n 1 'ps -eo pid,ppid,cmd,%cpu,%mem --sort=-%cpu | head -n 6'

Isso atualiza a cada 1 segundo e mostra os 5 principais processos que consomem CPU.

Para sair do watch, pressione Ctrl+C.

A combinação de ps com utilitários como watch oferece recursos poderosos para monitorar os processos do seu sistema em tempo real.

Resumo

Ao longo deste laboratório, você aprendeu habilidades essenciais para monitorar e gerenciar processos em um sistema Linux usando o comando ps e ferramentas relacionadas. Aqui está um resumo do que você cobriu:

  1. Informações básicas do processo: Você aprendeu a usar o comando ps básico para visualizar os processos associados à sua sessão de terminal atual, entendendo o formato básico da saída, incluindo PID, TTY, TIME e CMD.

  2. Visualização de processos em todo o sistema: Você dominou o uso de ps -e para visualizar todos os processos em execução no sistema, não apenas aqueles associados ao seu terminal.

  3. Informações detalhadas do processo: Você explorou o comando ps -ef para obter informações detalhadas sobre os processos, incluindo IDs de usuário, IDs de processo pai, horários de início e linhas de comando completas.

  4. Classificação e formatação avançadas: Você descobriu como criar saídas personalizadas com colunas específicas e opções de classificação usando ps -eo e o parâmetro --sort.

  5. Monitoramento em tempo real: Você aprendeu a usar o comando top para visualização dinâmica de processos em tempo real e como combinar ps com outros utilitários como watch para monitoramento contínuo.

Essas habilidades são fundamentais para administração de sistemas, solução de problemas e monitoramento de desempenho em ambientes Linux. Entender quais processos estão em execução e como eles estão consumindo recursos do sistema é essencial para manter a integridade do sistema e diagnosticar problemas.

À medida que você continua trabalhando com sistemas Linux, a capacidade de monitorar e gerenciar processos de forma eficaz será uma de suas habilidades mais valiosas.