Introdução
Neste laboratório, você ganhará experiência prática no monitoramento e gerenciamento de processos Linux, uma habilidade fundamental para qualquer administrador de sistema ou desenvolvedor. Você aprenderá a compreender os estados e ciclos de vida dos processos usando ps e top, controlar tarefas em segundo plano e em primeiro plano, e finalizar processos eficazmente com kill, killall e pkill. Além disso, você explorará como monitorar a carga do sistema e o uso da CPU usando uptime e lscpu, e analisará a atividade dos processos em detalhes com top. Este laboratório o equipará com as ferramentas e conhecimentos essenciais para gerenciar processos de forma eficiente e manter a saúde do sistema no RHEL.
Compreender Estados e Ciclo de Vida de Processos com ps e top
Neste passo, você aprenderá sobre os estados dos processos Linux e seus ciclos de vida. Compreender os estados dos processos é crucial para monitorar e gerenciar os recursos do sistema de forma eficaz. Você utilizará os comandos ps e top para observar os processos e seus estados.
Cada processo no Linux possui um estado que descreve sua atividade atual. Esses estados são definidos pelo kernel e indicam se um processo está em execução, em espera, parado ou em outras condições.
Vamos começar examinando os estados dos processos usando o comando ps. O comando ps reporta um instantâneo dos processos atuais.
Primeiro, abra seu terminal. Você pode fazer isso clicando no ícone do terminal na área de trabalho ou pressionando Ctrl+Alt+T. Seu diretório de trabalho padrão é ~/project.
Para ver todos os processos em execução no seu sistema, incluindo aqueles sem um terminal de controle, use o comando ps aux. As opções aux exibem os processos pertencentes a todos os usuários (a), processos sem um terminal de controle (x) e mostram um formato orientado ao usuário (u).
ps aux
Você verá uma longa lista de processos. Preste atenção à coluna STAT, que mostra o estado de cada processo. Estados comuns que você pode observar incluem:
R: Em execução ou pronto (na CPU ou aguardando execução)S: Sono interrompível (aguardando o término de um evento)D: Sono ininterrupível (aguardando E/S, não pode ser interrompido)T: Parado (suspenso por um sinal)Z: Zumbi (processo terminado, mas o processo pai não recolheu seu status de saída)
USER PID %CPU %MEM VSZ RSS TTY STAT START TIME COMMAND
root 1 0.0 0.2 171820 16140 ? Ss HH:MM 0:01 /usr/lib/systemd/systemd ...
root 2 0.0 0.0 0 0 ? S HH:MM 0:00 [kthreadd]
labex 3448 0.0 0.2 266904 3836 pts/0 R+ HH:MM 0:00 ps aux
...output omitted...
Em seguida, vamos usar o comando ps -ef. Este comando fornece uma lista completa (f) de todos os processos (e), mostrando mais detalhes como o ID do processo pai (PPID), utilização da CPU (C), hora de início (STIME) e o comando (CMD).
ps -ef
Esta saída é frequentemente usada para ver as relações pai-filho entre os processos, embora não mostre explicitamente uma estrutura de árvore.
UID PID PPID C STIME TTY TIME CMD
root 1 0 0 HH:MM ? 00:00:01 /usr/lib/systemd/systemd ...
root 2 0 0 HH:MM ? 00:00:00 [kthreadd]
root 3 2 0 HH:MM ? 00:00:00 [rcu_gp]
...output omitted...
Para visualizar a hierarquia de processos, você pode usar a opção ps --forest. Isso exibe os processos em um formato de árvore, facilitando a compreensão de quais processos geraram outros.
ps --forest
Este comando é particularmente útil para depuração e compreensão de como diferentes serviços e aplicativos são estruturados no seu sistema.
PID TTY TIME CMD
2768 pts/0 00:00:00 bash
5947 pts/0 00:00:00 \_ sleep 10000
6377 pts/0 00:00:00 \_ ps --forest
...output omitted...
Agora, vamos explorar o comando top, que fornece uma visualização dinâmica em tempo real de um sistema em execução. Ele exibe um resumo das informações do sistema e uma lista de processos ou threads atualmente gerenciados pelo kernel Linux.
Execute o comando top:
top
Você verá uma exibição interativa. A seção superior fornece informações resumidas do sistema, incluindo tempo de atividade, média de carga, resumo de tarefas, estatísticas da CPU e uso de memória. A seção inferior lista os processos individuais, ordenados por uso de CPU por padrão.
Na saída do top, observe a coluna S para os estados dos processos, semelhante ao ps. Você também pode ver %CPU (porcentagem de uso da CPU) e %MEM (porcentagem de uso de memória) para cada processo.
top - HH:MM:SS up DD min, X users, load average: X.XX, X.XX, X.XX
Tasks: XXX total, X running, XXX sleeping, X stopped, X zombie
%Cpu(s): X.X us, X.X sy, X.X ni, XX.X id, X.X wa, X.X hi, X.X si, X.X st
MiB Mem : XXXX.X total, XXXX.X free, XXX.X used, XXX.X buff/cache
MiB Swap: XXXX.X total, XXXX.X free, X.X used. XXXX.X avail Mem
PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND
XXXX labex 20 0 XXXXXX XXXX XXXX R X.X X.X 0:00.0X top
...output omitted...
Enquanto o top estiver em execução, você pode pressionar q para sair e retornar ao prompt do seu terminal.
Compreender esses comandos e as informações que eles fornecem é fundamental para monitorar e solucionar problemas de processos em um sistema Linux.
Controlar Tarefas em Segundo e Primeiro Plano
Neste passo, você aprenderá como gerenciar tarefas em segundo e primeiro plano dentro da sua sessão de shell. Esta é uma habilidade fundamental para um uso eficiente do terminal, permitindo que você execute tarefas demoradas sem bloquear o terminal.
Uma "tarefa" no contexto de um shell refere-se a um comando ou um pipeline de comandos que o shell está gerenciando. Você pode executar tarefas em segundo plano, trazê-las para o primeiro plano ou suspendê-las.
Vamos começar executando um comando simples em segundo plano. Usaremos o comando sleep, que simplesmente espera por um período de tempo especificado.
Para executar sleep 10000 (que espera por 10000 segundos) em segundo plano, adicione um caractere de ampersand (&) ao comando:
sleep 10000 &
Ao pressionar Enter, o shell retornará imediatamente ao prompt, e o comando sleep estará em execução em segundo plano. Você verá uma saída semelhante a esta, indicando o número da tarefa e seu Process ID (PID):
[1] 5947
O [1] indica que esta é a tarefa número 1 na sua sessão de shell atual, e 5947 é o PID do processo sleep.
Para visualizar uma lista de todas as tarefas gerenciadas pelo seu shell, use o comando jobs:
jobs
Você deve ver o comando sleep listado como uma tarefa em segundo plano em execução:
[1]+ Running sleep 10000 &
O + ao lado de [1] indica que esta é a tarefa atual (a que seria acionada por padrão se você não especificasse um número de tarefa).
Agora, vamos trazer esta tarefa em segundo plano para o primeiro plano. Isso significa que a tarefa assumirá o controle do seu terminal novamente. Use o comando fg seguido do número da tarefa (prefixado com %):
fg %1
O comando sleep 10000 agora estará em primeiro plano. Seu terminal ficará ocupado por este comando, e você não receberá um prompt até que ele termine ou seja suspenso.
sleep 10000
Enquanto um comando está em execução em primeiro plano, você pode enviá-lo para o segundo plano e suspendê-lo pressionando Ctrl+Z. Isso envia um sinal SIGTSTP para o processo.
Pressione Ctrl+Z agora:
^Z
Você verá uma saída indicando que a tarefa foi interrompida e movida para o segundo plano:
[1]+ Stopped sleep 10000
Agora, se você executar jobs novamente, verá que o comando sleep está no estado Parado:
jobs
[1]+ Stopped sleep 10000
Para retomar uma tarefa em segundo plano parada, você pode usar o comando bg seguido do número da tarefa. Isso reiniciará a tarefa em segundo plano.
bg %1
A tarefa agora estará em execução em segundo plano novamente:
[1]+ sleep 10000 &
Finalmente, vamos limpar a tarefa em segundo plano. Você pode encerrar uma tarefa em segundo plano usando o comando kill com seu PID, ou trazendo-a para o primeiro plano e, em seguida, encerrando-a (por exemplo, com Ctrl+C). Por enquanto, vamos trazê-la para o primeiro plano e encerrá-la.
fg %1
Agora que sleep 10000 está em primeiro plano, pressione Ctrl+C para encerrá-lo. Isso envia um sinal SIGINT para o processo.
^C
Você verá uma mensagem indicando que a tarefa foi encerrada:
[1]+ Terminated sleep 10000
Se você executar jobs novamente, deverá ver que não há mais tarefas listadas:
jobs
(sem saída)
Isso demonstra o fluxo de trabalho básico de gerenciamento de tarefas em segundo e primeiro plano, essencial para a multitarefa no terminal.
Terminar Processos com kill, killall e pkill
Neste passo, você aprenderá como terminar processos usando os comandos kill, killall e pkill. Esses comandos são essenciais para gerenciar recursos do sistema e interromper aplicativos com comportamento inadequado.
Processos no Linux respondem a sinais. Um sinal é uma interrupção de software entregue a um processo. Diferentes sinais têm significados diferentes, como terminar um processo, suspendê-lo ou fazer com que ele recarregue sua configuração.
Primeiro, vamos entender alguns sinais fundamentais de gerenciamento de processos:
- SIGTERM (15): O sinal padrão enviado por
kill. É um pedido "educado" para terminar. O processo pode capturar esse sinal, fazer a limpeza e, em seguida, sair. - SIGKILL (9): Um sinal "imbloqueável" que força o término imediato. O processo não pode ignorar ou manipular esse sinal. Use-o como último recurso.
- SIGHUP (1): Frequentemente usado para instruir um processo a recarregar seus arquivos de configuração sem reiniciar.
- SIGINT (2): Enviado ao pressionar
Ctrl+C, normalmente usado para interromper um processo em primeiro plano. - SIGSTOP (19): Suspende um processo. Não pode ser bloqueado ou manipulado.
- SIGCONT (18): Retoma um processo parado.
Você pode listar todos os sinais disponíveis e seus números usando kill -l:
kill -l
Você verá uma lista de sinais como esta:
1) SIGHUP 2) SIGINT 3) SIGQUIT 4) SIGILL 5) SIGTRAP
6) SIGABRT 7) SIGBUS 8) SIGFPE 9) SIGKILL 10) SIGUSR1
11) SIGSEGV 12) SIGUSR2 13) SIGPIPE 14) SIGALRM 15) SIGTERM
...output omitted...
Usando kill
O comando kill envia um sinal especificado para um processo identificado por seu Process ID (PID).
Vamos criar alguns processos em segundo plano para praticar o término deles. Usaremos comandos sleep novamente.
sleep 300 &
sleep 301 &
sleep 302 &
Agora, use jobs para ver seus números de tarefa e PIDs:
jobs
[1] 1234
[2] 1235
[3] 1236
(Observação: seus PIDs serão diferentes.)
Vamos encontrar o PID do primeiro processo sleep. Você pode usar ps aux | grep sleep e procurar o PID associado a sleep 300.
ps aux | grep sleep
Você verá uma saída semelhante a esta. Identifique o PID para sleep 300. Por exemplo, se o PID for 1234:
labex 1234 0.0 0.0 2200 680 pts/0 S HH:MM 0:00 sleep 300
labex 1235 0.0 0.0 2200 680 pts/0 S HH:MM 0:00 sleep 301
labex 1236 0.0 0.0 2200 680 pts/0 S HH:MM 0:00 sleep 302
labex 1237 0.0 0.0 6000 1000 pts/0 S+ HH:MM 0:00 grep sleep
Para terminar sleep 300 usando o sinal padrão SIGTERM, use kill seguido de seu PID. Substitua 1234 pelo PID real que você encontrou:
kill 1234
Você pode ver uma mensagem como [1]+ Terminated sleep 300. Verifique se ele desapareceu usando jobs ou ps aux | grep sleep:
jobs
[2]- Running sleep 301 &
[3]+ Running sleep 302 &
Agora, vamos terminar sleep 301 com força usando SIGKILL. Encontre seu PID (por exemplo, 1235) e use kill -9 ou kill -SIGKILL:
kill -9 1235
Você provavelmente verá [2]- Killed sleep 301. Verifique novamente:
jobs
[3]+ Running sleep 302 &
(e assim por diante...)
(O restante da documentação segue...)
Monitorar Carga do Sistema e Uso da CPU com uptime e lscpu
Neste passo, você aprenderá como monitorar a carga média do sistema e o uso da CPU usando os comandos uptime e lscpu. Compreender essas métricas é crucial para avaliar o desempenho do sistema e identificar gargalos potenciais.
Compreendendo a Carga Média com uptime
O comando uptime fornece uma visão geral rápida de quanto tempo o seu sistema está em execução, quantos usuários estão conectados e, o mais importante, a carga média do sistema. A carga média indica o número médio de processos que estão em estado executável ou ininterrupto durante um período de tempo.
Execute o comando uptime:
uptime
Você verá uma saída semelhante a esta:
HH:MM:SS up DD min, X users, load average: X.XX, X.XX, X.XX
Vamos analisar a saída:
HH:MM:SS: A hora atual.up DD min: Quanto tempo o sistema está em execução (tempo de atividade).X users: O número de usuários conectados atualmente.load average: X.XX, X.XX, X.XX: Esses três números representam a carga média do sistema nos últimos 1, 5 e 15 minutos, respectivamente.
Uma carga média de 1.00 em uma CPU de um único núcleo significa que a CPU está totalmente utilizada. Em uma CPU multi-núcleo, uma carga média igual ao número de núcleos de CPU significa que o sistema está totalmente utilizado. Por exemplo, em uma CPU de 4 núcleos, uma carga média de 4.00 indica utilização total. Se a carga média exceder consistentemente o número de núcleos de CPU, isso sugere que o seu sistema está sobrecarregado e os processos estão aguardando tempo de CPU.
Determinando os Núcleos da CPU com lscpu
Para interpretar corretamente a carga média, você precisa saber quantos núcleos lógicos de CPU o seu sistema possui. O comando lscpu fornece informações detalhadas sobre a arquitetura da CPU.
Execute o comando lscpu:
lscpu
Você verá uma saída extensa. Procure a linha CPU(s):, que indica o número total de CPUs lógicas disponíveis. Além disso, Core(s) per socket: e Socket(s): podem ajudar a entender o layout físico.
Architecture: x86_64
CPU op-mode(s): 32-bit, 64-bit
Byte Order: Little Endian
CPU(s): 4
On-line CPU(s) list: 0-3
Thread(s) per core: 2
Core(s) per socket: 2
Socket(s): 1
NUMA node(s): 1
...output omitted...
No exemplo acima, CPU(s): 4 indica que este sistema possui 4 núcleos de CPU lógicos.
Interpretando a Carga Média e os Núcleos da CPU
Vamos combinar as informações de uptime e lscpu. Suponha que sua saída uptime mostre uma carga média de 2.92, 4.48, 5.20 e lscpu mostre CPU(s): 4.
Para obter a carga média por CPU, divida cada número de carga média pelo número total de CPUs lógicas:
- Últimos 1 minuto:
2.92 / 4 = 0.73 - Últimos 5 minutos:
4.48 / 4 = 1.12 - Últimos 15 minutos:
5.20 / 4 = 1.30
Com base nesses cálculos:
- Nos últimos 1 minuto, as CPUs foram utilizadas em cerca de 73% de sua capacidade.
- Nos últimos 5 minutos, o sistema estava sobrecarregado em cerca de 12% (
1.12 - 1.00 = 0.12). Isso significa que os processos estavam aguardando tempo de CPU. - Nos últimos 15 minutos, o sistema estava sobrecarregado em cerca de 30% (
1.30 - 1.00 = 0.30).
Esta análise sugere que o sistema estava sob carga significativa nos últimos 5 e 15 minutos, mas a carga diminuiu no último minuto. Este tipo de análise de tendência é crucial para entender a saúde do sistema.
Esses dois comandos, uptime e lscpu, são ferramentas simples, mas poderosas, para avaliar rapidamente a saúde geral e o desempenho do seu sistema Linux.
Analisar a Atividade de Processos com top
Neste passo, você aprofundará o uso do comando top para analisar a atividade dos processos. Embora o top forneça uma visão em tempo real, também oferece recursos interativos poderosos para ordenar, filtrar e gerenciar processos.
Lembre-se de que, em um passo anterior, o top fornece uma visão dinâmica do seu sistema. Vamos iniciar o top novamente:
top
Você verá a interface familiar do top. A seção superior fornece estatísticas do sistema como um todo, e a seção inferior lista os processos.
Compreendendo as Colunas do top
Vamos revisar as colunas padrão na lista de processos:
- PID: ID do processo.
- USER: O proprietário do processo.
- PR: Prioridade do processo.
- NI: Valor Nice do processo (valor Nice menor significa prioridade maior).
- VIRT: Memória virtual usada pelo processo.
- RES: Memória residente (RAM física) usada pelo processo.
- SHR: Memória compartilhada usada pelo processo.
- S: Estado do processo (R=Executando, S=Dormindo, D=Dormindo Ininterrupto, T=Parado, Z=Zombie).
- %CPU: Porcentagem de uso da CPU desde a última atualização.
- %MEM: Porcentagem de uso de memória (RES / memória física total).
- TIME+: Tempo total de CPU usado pelo processo desde seu início.
- COMMAND: O nome do comando que iniciou o processo.
Teclas Interativas no top
O top é altamente interativo. Você pode pressionar várias teclas para alterar sua exibição e interagir com os processos.
Ordenando Processos:
- Pressione
Shift+P(P maiúsculo) para ordenar os processos por uso de CPU (%CPU), que geralmente é o padrão. - Pressione
Shift+M(M maiúsculo) para ordenar os processos por uso de memória (%MEM). - Pressione
Shift+T(T maiúsculo) para ordenar os processos porTIME+.
Experimente pressionar
Shift+Magora para ordenar por uso de memória. Observe como a lista de processos é reorganizada. Em seguida, pressioneShift+Ppara retornar à ordenação por CPU.- Pressione
Filtrando por Usuário:
- Pressione
u(u minúsculo). Otopsolicitará um nome de usuário. Digitelabexe pressione Enter. - Agora, o
topexibirá apenas os processos pertencentes ao usuáriolabex. Isso é muito útil para se concentrar em seus próprios processos. - Para limpar o filtro e mostrar todos os usuários novamente, pressione
ue, em seguida, pressione Enter sem digitar um nome de usuário.
- Pressione
Alterando o Intervalo de Atualização:
- Por padrão, o
topse atualiza a cada 3 segundos. Você pode alterar esse intervalo. - Pressione
s(s minúsculo). Otopsolicitará um tempo de atraso. Digite1(para 1 segundo) e pressione Enter. - Observe como a exibição se atualiza com mais frequência.
- Você pode alterá-lo de volta para 3 segundos pressionando
snovamente e digitando3.
- Por padrão, o
Matando um Processo:
- Você pode terminar um processo diretamente do
top. - Primeiro, vamos criar um processo
sleepem segundo plano em um novo terminal ou janela, ou pressionandoCtrl+Zno terminal atual, depoisbgpara colocar otopem segundo plano, depois executesleep 600 &, depoisfgpara trazer otopde volta ao primeiro plano. - Alternativamente, você pode abrir um novo terminal (por exemplo,
Ctrl+Shift+Tem muitos terminais) e executarsleep 600 &lá. - Depois de ter um processo
sleepem execução, volte ao seu terminaltop. - Pressione
k(k minúsculo). Otopsolicitará o PID do processo a ser morto. - Encontre o PID do seu processo
sleep 600na lista dotop. Digite esse PID e pressione Enter. - O
topsolicitará o sinal a ser enviado. O padrão é15(SIGTERM). Pressione Enter para enviarSIGTERM. - O processo
sleepdeve desaparecer da lista. Se não, você pode tentarknovamente e enviar o sinal9(SIGKILL).
- Você pode terminar um processo diretamente do
Alterando a Prioridade de um Processo (Renicing):
- Alterar a prioridade de um processo. Um valor Nice menor significa prioridade maior.
- Pressione
r(r minúsculo). Otopsolicitará um PID e, em seguida, um valor Nice (por exemplo,-10para prioridade maior,10para prioridade menor). - Este é um recurso avançado para gerenciar recursos do sistema. Para este laboratório, simplesmente pressione
r, depoisEnterduas vezes para cancelar a operação sem alterar nada.
Saindo do
top:- Quando terminar, pressione
q(q minúsculo) para sair dotope retornar ao prompt do seu terminal.
- Quando terminar, pressione
O top é uma ferramenta indispensável para administradores e usuários de sistema. Dominar seus recursos interativos permite um diagnóstico rápido e eficaz de problemas de desempenho do sistema e gerenciamento de processos.
Resumo
Neste laboratório, você aprendeu conceitos fundamentais de gerenciamento de processos Linux. Iniciou compreendendo os estados dos processos e seu ciclo de vida usando os comandos ps e top, observando como os processos transitam entre estados como Executando (R), Dormindo Interrompível (S) e Parado (T). Você praticou identificar estados comuns de processos e interpretar a saída de ps aux e ps -ef para obter insights sobre os processos do sistema.
Além disso, explorou métodos para controlar tarefas em segundo plano e em primeiro plano, o que é crucial para o uso eficiente do terminal. Você também dominou a terminação de processos usando vários comandos, como kill, killall e pkill, compreendendo suas diferentes aplicações para terminação suave ou forçada. Finalmente, aprendeu a monitorar a carga do sistema e o uso da CPU com uptime e lscpu, e a analisar a atividade detalhada dos processos usando top, fornecendo uma visão abrangente do desempenho do sistema e da utilização de recursos.



