====== Gerenciamento de Processos no Linux ======
===== Nível Básico =====
=== 1. Visualização de Processos Simples ===
* **ps** - Lista os processos em execução no terminal atual.
- Exemplo de uso: ps
- Descrição: Exibe os processos em execução no terminal atual com informações básicas como PID, TTY e comando.
* **top** - Monitora processos em tempo real.
- Exemplo de uso: top
- Descrição: Mostra os processos em execução, uso de CPU, memória e tempo de execução em uma interface interativa em tempo real.
=== 2. Gerenciamento Básico de Processos ===
* **kill** - Encerra um processo com base no PID.
- Exemplo de uso: kill 1234
- Descrição: Encerra o processo com o PID 1234. Utiliza o sinal padrão (SIGTERM) para solicitar o encerramento.
* **bg** - Coloca um processo suspenso em segundo plano.
- Exemplo de uso: bg %1
- Descrição: Retoma o processo suspenso ''%1'' e o coloca em execução em segundo plano.
=== 3. Comandos de Controle de Processos Simples ===
* **jobs** - Lista os processos em segundo plano e suspensos no shell atual.
- Exemplo de uso: jobs
- Descrição: Exibe uma lista dos processos que estão rodando em segundo plano ou suspensos no terminal atual.
* **fg** - Traz um processo de segundo plano para o primeiro plano.
- Exemplo de uso: fg %1
- Descrição: Move o processo ''%1'' do segundo plano para o primeiro plano para continuar sua execução de forma interativa.
===== Nível Intermediário =====
=== 1. Visualização Detalhada de Processos ===
* **ps aux** - Lista todos os processos em execução no sistema com informações detalhadas.
- Exemplo de uso: ps aux
- Descrição: Exibe uma lista completa de todos os processos, incluindo aqueles que não estão associados ao terminal atual, com informações como CPU, memória e usuário que iniciou o processo.
* **htop** - Visualização interativa de processos com interface melhorada.
- Exemplo de uso: htop
- Descrição: Ferramenta interativa para monitorar processos em tempo real, permitindo a navegação fácil com o teclado e suporte a múltiplas opções de filtragem e ordenação.
=== 2. Enviar Sinais para Processos ===
* **kill -9** - Envia o sinal SIGKILL para encerrar um processo imediatamente.
- Exemplo de uso: kill -9 1234
- Descrição: Força o encerramento imediato do processo com PID 1234. Este comando não permite que o processo execute a rotina de limpeza antes de ser finalizado.
* **killall** - Envia sinais para múltiplos processos com o mesmo nome.
- Exemplo de uso: killall firefox
- Descrição: Encerra todos os processos que correspondem ao nome especificado, no caso ''firefox''.
=== 3. Gerenciamento de Prioridade de Processos ===
* **nice** - Inicia um processo com uma prioridade específica.
- Exemplo de uso: nice -n 10 comando
- Descrição: Executa o ''comando'' com prioridade reduzida, o que permite que ele consuma menos recursos do sistema.
* **renice** - Altera a prioridade de um processo em execução.
- Exemplo de uso: renice +5 1234
- Descrição: Altera a prioridade do processo com PID 1234, reduzindo sua prioridade, de forma que ele consuma menos recursos.
=== 4. Parar e Continuar Processos ===
* **kill -STOP** - Suspende temporariamente um processo.
- Exemplo de uso: kill -STOP 1234
- Descrição: Suspende o processo com PID 1234, parando sua execução, mas sem encerrá-lo.
* **kill -CONT** - Retoma a execução de um processo suspenso.
- Exemplo de uso: kill -CONT 1234
- Descrição: Retoma a execução do processo com PID 1234 que estava suspenso.
===== Nível Avançado =====
=== 1. Gerenciamento de Processos em Execução ===
* **top -u** - Filtra processos por um usuário específico.
- Exemplo de uso: top -u usuario
- Descrição: Exibe os processos em execução pertencentes ao usuário ''usuario'', permitindo monitorar apenas suas atividades.
* **pgrep** - Encontra processos com base em nome ou outros critérios.
- Exemplo de uso: pgrep apache2
- Descrição: Procura o PID de todos os processos que correspondem ao nome ''apache2''.
=== 2. Gerenciamento Avançado de Processos com `nohup` ===
* **nohup** - Executa um processo que continuará rodando mesmo após o encerramento do terminal.
- Exemplo de uso: nohup comando &
- Descrição: Executa o ''comando'' em segundo plano, ignorando o sinal de hangup, permitindo que o processo continue rodando após a desconexão do terminal.
* **disown** - Remove um processo de segundo plano da lista de processos associados ao terminal.
- Exemplo de uso: disown -h %1
- Descrição: Desassocia o processo ''%1'' do terminal atual, para que ele não seja terminado ao fechar a sessão.
=== 3. Gerenciamento de Processos em Múltiplas Máquinas ===
* **pssh** - Executa comandos de forma paralela em várias máquinas via SSH.
- Exemplo de uso: pssh -h hosts.txt -l usuario comando
- Descrição: Executa o ''comando'' em todas as máquinas listadas no arquivo ''hosts.txt'', utilizando o usuário ''usuario'' para acesso SSH.
* **parallel-ssh** - Executa comandos simultaneamente em múltiplos servidores.
- Exemplo de uso: parallel-ssh -h servidores.txt df -h
- Descrição: Executa o comando ''df -h'' em todos os servidores listados no arquivo ''servidores.txt'', exibindo o uso de disco em cada servidor.
=== 4. Debug e Análise de Processos ===
* **strace** - Rastreia chamadas de sistema feitas por um processo.
- Exemplo de uso: strace -p 1234
- Descrição: Anexa ao processo com PID 1234 e exibe todas as chamadas de sistema que o processo está fazendo, útil para debug.
* **lsof** - Exibe arquivos abertos e portas de rede usadas por processos.
- Exemplo de uso: lsof -i :80
- Descrição: Mostra todos os processos que estão usando a porta 80, normalmente para identificar servidores web ativos.
=== 5. Controle de Recursos por Processo ===
* **cgroups** - Controla e limita o uso de recursos de um grupo de processos.
- Exemplo de uso: cgcreate -g memory,cpu:/meugrupo
- Descrição: Cria um grupo de controle ''meugrupo'' com limites de uso de CPU e memória. Este grupo pode ser usado para limitar recursos de processos específicos.
* **systemd-run** - Executa um processo sob um escopo gerenciado por systemd.
- Exemplo de uso: systemd-run --scope -p MemoryMax=500M comando
- Descrição: Executa o ''comando'' com um limite máximo de uso de memória de 500 MB, gerenciado pelo systemd.
===== Nível Especializado =====
=== 1. Controle Avançado de Processos com `cgroups` ===
* **cgexec** - Executa processos em grupos de controle (cgroups) específicos.
- Exemplo de uso: cgexec -g cpu,memory:/meugrupo comando
- Descrição: Executa o ''comando'' dentro do cgroup ''meugrupo'', que possui restrições de CPU e memória pré-definidas, garantindo controle sobre o uso de recursos.
* **cgset** - Ajusta os parâmetros de cgroups em tempo real.
- Exemplo de uso: cgset -r memory.limit_in_bytes=512M /meugrupo
- Descrição: Ajusta dinamicamente o limite de memória do cgroup ''meugrupo'' para 512 MB, afetando todos os processos executados dentro deste grupo.
=== 2. Manipulação Especializada de Processos com `systemd` ===
* **systemctl isolate** - Coloca o sistema em um estado ou alvo específico.
- Exemplo de uso: systemctl isolate rescue.target
- Descrição: Transfere o sistema para o modo de resgate, terminando a maioria dos processos normais e mantendo apenas o essencial para manutenção.
* **systemctl kill** - Envia sinais a processos gerenciados pelo systemd.
- Exemplo de uso: systemctl kill --kill-who=all apache2.service
- Descrição: Envia sinais de término para todos os processos relacionados ao serviço ''apache2'' gerenciado pelo systemd.
=== 3. Limitação de I/O com `ionice` ===
* **ionice** - Controla a prioridade de operações de entrada/saída de disco para processos.
- Exemplo de uso: ionice -c2 -n7 comando
- Descrição: Executa o ''comando'' com prioridade baixa para operações de I/O no disco, minimizando seu impacto no sistema.
* **ionice** + **renice** - Combina controle de I/O e prioridade de CPU.
- Exemplo de uso: ionice -c2 -n7 renice +10 1234
- Descrição: Ajusta a prioridade de I/O e de CPU para o processo com PID 1234, garantindo que ele consuma poucos recursos de CPU e disco.
=== 4. Gerenciamento de Processos em Containers ===
* **docker run** - Inicia processos em containers Docker.
- Exemplo de uso: docker run --rm -d --name app_container app_imagem
- Descrição: Inicia um processo em um container isolado com base na imagem ''app_imagem'', permitindo que o processo seja executado de forma independente do sistema host.
* **docker stats** - Monitora o uso de recursos por processos em containers.
- Exemplo de uso: docker stats app_container
- Descrição: Exibe o uso de CPU, memória, I/O e rede de todos os processos em execução dentro do container ''app_container'' em tempo real.
=== 5. Execução de Processos Distribuídos ===
* **Ansible** - Orquestra processos em múltiplos servidores.
- Exemplo de uso: ansible -i hosts all -m shell -a 'comando'
- Descrição: Executa o ''comando'' em todos os servidores listados no arquivo ''hosts'', orquestrando processos de forma paralela em uma infraestrutura distribuída.
* **Kubernetes** - Gerencia processos em containers distribuídos.
- Exemplo de uso: kubectl run app --image=app_imagem --replicas=3
- Descrição: Executa o processo em três réplicas de containers, distribuindo a carga entre múltiplos nós do cluster Kubernetes.
=== 6. Monitoração Avançada de Processos ===
* **atop** - Ferramenta avançada para monitoramento detalhado de processos e recursos.
- Exemplo de uso: atop
- Descrição: Exibe estatísticas detalhadas de uso de CPU, memória, disco e rede por processo em tempo real, permitindo a análise de desempenho.
* **perf** - Ferramenta de análise de performance de processos.
- Exemplo de uso: perf stat -p 1234
- Descrição: Coleta e exibe métricas detalhadas de desempenho do processo com PID 1234, como número de ciclos de CPU, cache miss e outras métricas de hardware.