5. Processos
Atualizado em: 29 de fevereiro de 2024
Por: Nelson H. Koshoji
5.1. Definição
Em sistemas operacionais, um processo é basicamente um programa em execução. É uma instância de um programa de computador que está sendo executado por um ou mais threads. Cada processo possui um estado atual que pode incluir informações sobre o código do programa, a posição do contador de programa, os registradores da CPU, as variáveis, o estado da memória, os recursos alocados, informações de segurança, e outras informações de gerenciamento necessárias para sua execução.
Um processo, portanto, é mais do que o código do programa (chamado de texto do programa); é uma entidade dinâmica que inclui um contador que mantém a trilha da próxima instrução a executar, os valores das variáveis do programa, e os recursos alocados, como arquivos abertos e conexões de rede.
Ciclo de Vida de um Processo:
O ciclo de vida de um processo pode ser dividido nas seguintes fases:
-
Criação: Um processo é criado quando um programa é iniciado, seja através de uma ação do usuário, como abrir um aplicativo, ou por um processo existente que cria um novo processo.
-
Execução: Assim que é criado, o processo entra no estado de execução, onde as instruções são executadas pela CPU. Um processo pode ser executado imediatamente se a CPU estiver disponível ou pode esperar na fila de prontos até que a CPU fique livre.
-
Espera: Um processo pode entrar em estado de espera se ele requer um recurso ou precisa de um evento que ainda não está disponível (por exemplo, aguardando entrada/saída).
-
Término: Um processo é encerrado quando completa sua execução ou é terminado por um comando do sistema operacional. Após o término, ele libera quaisquer recursos que estejam alocados e é removido da memória do sistema.
Controle de Processos em Sistemas Operacionais Linux
O controle de processos é uma parte fundamental da administração de sistemas operacionais, como o Linux. Ele permite que os administradores e usuários gerenciem e interajam com os processos que estão executando no sistema.
Uso do Comando ps
para Listar Processos: O comando ps
(abreviação de “process status”) é uma ferramenta tradicional em sistemas Unix usada para exibir informações sobre os processos ativos no sistema. Ao executar o comando ps
sem argumentos, você verá os processos associados ao terminal atual. No entanto, é possível passar uma variedade de opções para o comando ps
para exibir diferentes conjuntos de informações ou modificar o formato de saída. Por exemplo:
ps aux
exibe todos os processos em execução no sistema, independentemente do terminal.ps -ef
fornece uma visão completa do sistema com um formato de saída diferente.
Identificação de Informações Chave: Quando você lista processos com o comando ps
, algumas das informações chave que você verá incluem:
- PID: O “Process ID” é um número único atribuído pelo sistema operacional a cada processo. É usado para especificar o processo em vários comandos de controle de processo.
- Usuário: O nome do usuário que iniciou o processo. Isso é importante para controle de acesso e segurança.
- Estado do Processo: O estado atual do processo pode ser um dos seguintes:
R
(executando)S
(dormindo)T
(parado)Z
(zumbi, ou seja, terminado mas ainda na tabela de processos)D
(espera ininterrupta, geralmente em E/S)
Outras informações como o uso de CPU, memória, o comando que iniciou o processo, e o tempo de execução também podem ser exibidos.
Comando top
e htop
para Monitoramento em Tempo Real: O comando top
fornece uma visão dinâmica em tempo real dos processos que estão consumindo mais recursos no sistema. Ele é atualizado periodicamente e exibe um resumo de informações como uso de CPU, memória, tempo de execução e prioridade dos processos.
- Ao executar
top
, você verá uma lista dos processos que estão ativamente usando recursos, com os mais “pesados” no topo.
- PID: Número de identificação do processo.
- USER: Usuário que iniciou o processo.
- PR: Prioridade do processo.
- NI: O “nice value” do processo, que influencia a prioridade.
- VIRT: Total de memória virtual usada pelo processo.
- RES: Total de memória física usada pelo processo.
- SHR: Memória compartilhada pelo processo.
- S: Estado do processo (sleeping, running, etc.).
- %CPU: Percentual da CPU sendo usado pelo processo.
- %MEM: Percentual da memória física sendo usado pelo processo.
- TIME+: Tempo total de CPU usado desde o início do processo.
- COMMAND: O comando que iniciou o processo.
O htop
é uma ferramenta mais avançada que o top
. Ele fornece uma interface colorida e fácil de navegar, suporta o uso do mouse e permite uma personalização mais fácil.
- Com
htop
, você pode ver uma representação gráfica do uso de recursos, como barras para CPU e memória. - Ele também facilita a filtragem de processos, pesquisa e outras operações de gerenciamento de processos.
Navegação pela Interface do htop
e Identificação dos Recursos htop
apresenta uma interface colorida que divide a tela em três seções principais:
- Barra de cabeçalho: Mostra o uso de CPU, memória e swap com barras gráficas.
- Lista de processos: Exibe os processos em execução, onde cada linha representa um processo e as colunas fornecem detalhes como PID, usuário, prioridade, uso de CPU e memória, tempo de CPU e comando.
- Barra de rodapé: Contém o menu de atalhos de teclado para várias ações dentro do
htop
.
Você pode usar as teclas de seta para navegar pela lista de processos e selecionar um processo. Além disso, você pode ordenar a lista de processos por qualquer coluna clicando nela com o mouse ou usando as teclas de atalho correspondentes.
Personalização da Visualização e Compreensão dos Indicadores de Recursos htop
permite personalizar a exibição e quais colunas são visíveis. Você pode acessar o menu de configuração pressionando F2
. Lá, você pode escolher quais colunas deseja ver, alterar a aparência das barras de CPU e memória e ajustar muitos outros parâmetros de visualização.
Os indicadores de recursos no topo da tela são atualizados em tempo real e dão uma visão instantânea do estado atual do sistema. Eles podem ajudar a identificar gargalos de desempenho e verificar a saúde geral do sistema. Por exemplo, se uma das CPUs está sempre a 100%, pode ser um sinal de que um processo está consumindo recursos demais. O mesmo vale para a memória: uso constante e alto pode indicar vazamento de memória ou necessidade de mais recursos.
5.2. Principais comandos para manipular processos
Para manipular processos em sistemas Unix-like, como o Linux, há uma variedade de comandos que você pode usar. Aqui estão alguns dos mais comuns:
ps: Exibe os processos em execução.
-
- Exemplo:
ps aux
para listar todos os processos com informações detalhadas.
- Exemplo:
top: Exibe os processos em execução em tempo real.
-
- Exemplo:
top
para ver os processos que estão consumindo mais recursos.
- Exemplo:
htop: Versão melhorada e interativa do comando top
.
-
- Exemplo:
htop
para uma visualização mais rica e interativa dos processos.
- Exemplo:
kill: Envia um sinal para terminar um processo especificado pelo PID (Process ID).
-
- Exemplo:
kill 1234
para terminar o processo com PID 1234.
- Exemplo:
killall: Termina todos os processos com o nome especificado.
-
- Exemplo:
killall firefox
para terminar todos os processos chamados firefox.
- Exemplo:
pkill: Envia um sinal para terminar processos com base em um critério, como um nome de processo.
-
- Exemplo:
pkill -9 -f my_script
para forçar a parada de todos os processos que correspondem ao padrãomy_script
.
- Exemplo:
nice: Inicia um novo processo com uma prioridade definida.
-
- Exemplo:
nice -n 10 command
para iniciarcommand
com uma prioridade baixa.
- Exemplo:
renice: Altera a prioridade de processos em execução.
-
- Exemplo:
renice -n 10 -p 1234
para alterar a prioridade do processo com PID 1234 para 10.
- Exemplo:
Esses são alguns comandos que oferecem controle detalhado sobre os processos.
5.3. Atividades
1. Roteiro da Atividade Prática: Listagem e Controle de Processos
Objetivo: Listar processos em execução no Linux, identificar processos específicos e terminar um processo não essencial utilizando os comandos ps
, grep
e kill
.
1. Abrir o Terminal: Ctrl+Alt+T.
2. Listar Todos os Processos em Execução. No terminal, digite o seguinte comando e pressione Enter:
ps aux
3. Abra o vnavegador firefox (como um exemplo)
4. Identifique o processo específico
ps aux | grep firefox
Se você tiver várias instâncias do Firefox ou muitos plugins ativos, você poderá ver muitas linhas na saída. O processo do navegador em si geralmente é o que tem o caminho para o executável do Firefox.
pgrep firefox
5. Terminar o processo
Para terminar o processo, utilize o comando kill
seguido pelo PID:
kill [PID]
5.4. Gerenciamento de Serviços com systemctl no Linux
systemctl
é uma ferramenta de controle do systemd, que é o sistema de inicialização e gerenciamento de serviços para muitas distribuições Linux modernas. É responsável por inicializar o sistema e gerenciar os serviços do sistema. Aqui está um guia sobre como usar o systemctl
para gerenciar serviços no Linux.
Comando systemctl status [nome_do_serviço]
O comando systemctl status
é usado para exibir o estado atual de um serviço. Ao executar este comando, você recebe informações detalhadas sobre o serviço, como se está ativo, inativo ou em falha, além de um extrato dos últimos logs do serviço que podem ajudar no diagnóstico de problemas.
Exemplo de Uso:
sudo systemctl status smbd
Este comando mostrará o status do serviço Samba. A saída incluirá a condição atual do serviço (ativo, inativo, falhando, etc.), junto com a data e hora da última ativação e as últimas mensagens de log.
Comandos para Iniciar, Parar, Reiniciar e Habilitar Serviços systemctl
oferece comandos simples para controlar serviços:
systemctl start [nome_do_serviço]
é usado para iniciar um serviço que está parado.systemctl stop [nome_do_serviço]
irá parar um serviço que está em execução.systemctl restart [nome_do_serviço]
irá parar e então iniciar um serviço novamente, útil para aplicar configurações alteradas ou reinicializar um serviço que está com problemas.systemctl enable [nome_do_serviço]
habilita um serviço para ser iniciado na inicialização do sistema.systemctl disable [nome_do_serviço]
impede que um serviço seja iniciado automaticamente na inicialização do sistema.