SingularCode

SOLIN-05

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:

  1. 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.

  2. 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.

  3. 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).

  4. 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.

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.

top: Exibe os processos em execução em tempo real.

    • Exemplo: top para ver os processos que estão consumindo mais recursos.

htop: Versão melhorada e interativa do comando top.

    • Exemplo: htop para uma visualização mais rica e interativa dos processos.

kill: Envia um sinal para terminar um processo especificado pelo PID (Process ID).

    • Exemplo: kill 1234 para terminar o processo com PID 1234.

killall: Termina todos os processos com o nome especificado.

    • Exemplo: killall firefox para terminar todos os processos chamados firefox.

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ão my_script.

nice: Inicia um novo processo com uma prioridade definida.

    • Exemplo: nice -n 10 command para iniciar command com uma prioridade baixa.

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.

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 psgrep 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.