Pesquisa de site

Tudo o que você precisa saber sobre processos no Linux [guia completo]


Neste artigo, abordaremos uma compreensão básica dos processos e veremos brevemente como gerenciar processos no Linux usando determinados comandos.

Um processo refere-se a um programa em execução; é uma instância em execução de um programa. É composto pelas instruções do programa, dados lidos de arquivos, outros programas ou entrada de um usuário do sistema.

Tipos de Processos

Existem fundamentalmente dois tipos de processos no Linux:

  • Processos em primeiro plano (também chamados de processos interativos) – são inicializados e controlados por meio de uma sessão de terminal. Ou seja, é necessário que haja um usuário conectado ao sistema para iniciar tais processos; eles não foram iniciados automaticamente como parte das funções/serviços do sistema.
  • Processos em segundo plano (também chamados de processos não interativos/automáticos) – são processos não conectados a um terminal; eles não esperam nenhuma entrada do usuário.

O que são Daemons

Esses são tipos especiais de processos em segundo plano que iniciam na inicialização do sistema e continuam em execução para sempre como um serviço; eles não morrem. Elas são iniciadas como tarefas do sistema (executadas como serviços), espontaneamente. No entanto, eles podem ser controlados por um usuário através do processo init.

Criação de Processos no Linux

Um novo processo normalmente é criado quando um processo existente faz uma cópia exata de si mesmo na memória. O processo filho terá o mesmo ambiente que seu pai, mas apenas o número de ID do processo será diferente.

Existem duas formas convencionais usadas para criar um novo processo no Linux:

  • Usando a função System() – este método é relativamente simples, porém, é ineficiente e apresenta riscos de segurança significativamente certos.
  • Utilização das funções fork() e exec() – esta técnica é um pouco avançada mas oferece maior flexibilidade, rapidez e segurança.

Como o Linux identifica processos?

Como o Linux é um sistema multiusuário, o que significa que diferentes usuários podem executar vários programas no sistema, cada instância de um programa em execução deve ser identificada exclusivamente pelo kernel.

E um programa é identificado por seu ID de processo (PID), bem como por seu ID de processo pai (PPID), portanto, os processos podem ser categorizados em:

  • Processos pais – são processos que criam outros processos durante o tempo de execução.
  • Processos filhos – esses processos são criados por outros processos durante o tempo de execução.

O processo de inicialização

O processo Init é a mãe (pai) de todos os processos do sistema, é o primeiro programa executado quando o sistema Linux é inicializado; ele gerencia todos os outros processos no sistema. Ele é iniciado pelo próprio kernel, portanto, em princípio, não possui um processo pai.

O processo init sempre tem ID de processo 1. Funciona como pai adotivo para todos os processos órfãos.

Você pode usar o comando pidof para encontrar o ID de um processo:

pidof systemd
pidof top
pidof httpd

Para encontrar o ID do processo e o ID do processo pai do shell atual, execute:

echo $$
echo $PPID

Iniciando um processo no Linux

Depois de executar um comando ou programa (por exemplo cloudcmd – CloudCommander), ele iniciará um processo no sistema. Você pode iniciar um processo em primeiro plano (interativo) da seguinte maneira, ele será conectado ao terminal e um usuário poderá enviá-lo:

cloudcmd

Trabalhos em segundo plano do Linux

Para iniciar um processo em segundo plano (não interativo), use o símbolo &, aqui o processo não lê a entrada de um usuário até que seja movido para o primeiro plano.

cloudcmd &
jobs

Você também pode enviar um processo para segundo plano suspendendo-o usando [Ctrl + Z], isso enviará o sinal SIGSTOP para o processo, interrompendo assim suas operações; fica ocioso:

tar -cf backup.tar /backups/*  #press Ctrl+Z
jobs

Para continuar executando o comando suspenso acima em segundo plano, use o comando bg:

bg

Para enviar um processo em segundo plano para primeiro plano, use o comando fg junto com o ID do trabalho, assim:

jobs
fg %1

Você também pode gostar de: Como iniciar o comando do Linux em segundo plano e desanexar o processo no terminal

Estados de um processo no Linux

Durante a execução, um processo muda de um estado para outro dependendo de seu ambiente/circunstâncias. No Linux, um processo possui os seguintes estados possíveis:

  • Em execução – aqui ele está em execução (é o processo atual no sistema) ou está pronto para ser executado (está aguardando para ser atribuído a uma das CPUs).
  • Aguardando – neste estado, um processo está aguardando a ocorrência de um evento ou de um recurso do sistema. Além disso, o kernel também diferencia dois tipos de processos em espera; processos de espera interrompíveis – podem ser interrompidos por sinais e processos de espera ininterruptos – aguardam diretamente nas condições de hardware e não podem ser interrompidos por nenhum evento/sinal.
  • Parado – neste estado, um processo foi interrompido, geralmente ao receber um sinal. Por exemplo, um processo que está sendo depurado.
  • Zumbi – aqui, um processo está morto, foi interrompido, mas ainda possui uma entrada na tabela de processos.

Como visualizar processos ativos no Linux

Existem diversas ferramentas Linux para visualizar/listar processos em execução no sistema, as duas tradicionais e conhecidas são os comandos ps e top:

1. Comando ps

Ele exibe informações sobre uma seleção de processos ativos no sistema conforme mostrado abaixo:

ps 
ps -e | head 

2. topo – Ferramenta de monitoramento do sistema

top é uma ferramenta poderosa que oferece uma visão dinâmica em tempo real de um sistema em execução, conforme mostrado na imagem abaixo:

top 

Leia isto para obter mais exemplos de uso importante: 12 exemplos de comandos TOP no Linux

3. olhares – Ferramenta de monitoramento do sistema

glances é uma ferramenta de monitoramento de sistema relativamente nova com recursos avançados:

glances

Para obter um guia de uso abrangente, leia: Glances – Uma ferramenta avançada de monitoramento de sistema em tempo real para Linux

Existem várias outras ferramentas úteis de monitoramento do sistema Linux que você pode usar para listar processos ativos. Abra o link abaixo para ler mais sobre eles:

  1. 20 ferramentas de linha de comando para monitorar o desempenho do Linux
  2. 13 ferramentas de monitoramento Linux mais úteis

Como controlar processos no Linux

O Linux também possui alguns comandos para controlar processos como kill, pkill, pgrep e killall, abaixo estão alguns exemplos básicos de como utilizá-los:

pgrep -u tecmint top
kill 2308
pgrep -u tecmint top
pgrep -u tecmint glances
pkill glances
pgrep -u tecmint glances

Para aprender como usar esses comandos em profundidade, para encerrar/encerrar processos ativos no Linux, abra os links abaixo:

  1. Um guia para comandos Kill, Pkill e Killall para encerrar processos Linux
  2. Como encontrar e eliminar processos em execução no Linux

Observe que você pode usá-los para eliminar aplicativos que não respondem no Linux quando o sistema congela.

Envio de sinais para processos

A forma fundamental de controlar processos no Linux é enviando sinais para eles. Existem vários sinais que você pode enviar para um processo, para visualizar todos os sinais executados:

kill -l

Para enviar um sinal a um processo, use os comandos kill, pkill ou pgrep que mencionamos anteriormente. Mas os programas só podem responder a sinais se forem programados para reconhecê-los.

E a maioria dos sinais é para uso interno do sistema ou para programadores quando eles escrevem código. A seguir estão sinais que são úteis para um usuário do sistema:

  • SIGHUP 1 – enviado para um processo quando seu terminal de controle é fechado.
  • SIGINT 2 – enviado a um processo pelo seu terminal de controle quando um usuário interrompe o processo pressionando [Ctrl+C].
  • SIGQUIT 3 – enviado para um processo se o usuário enviar um sinal de encerramento [Ctrl+D].
  • SIGKILL 9 – este sinal encerra (mata) imediatamente um processo e o processo não realizará nenhuma operação de limpeza.
  • SIGTERM 15 – este é um sinal de encerramento do programa (kill irá enviá-lo por padrão).
  • SIGTSTP 20 – enviado a um processo pelo seu terminal controlador para solicitar sua parada (terminal stop); iniciado pelo usuário pressionando [Ctrl+Z].

A seguir estão exemplos de comandos kill para encerrar o aplicativo Firefox usando seu PID assim que ele congelar:

pidof firefox
kill 9 2687
OR
kill -KILL 2687
OR
kill -SIGKILL 2687  

Para encerrar um aplicativo usando seu nome, use pkill ou killall assim:

pkill firefox
killall firefox 

Alterando a prioridade do processo Linux

No sistema Linux, todos os processos ativos têm uma prioridade e um certo valor interessante. Os processos com prioridade mais alta normalmente obterão mais tempo de CPU do que os processos com prioridade mais baixa.

Entretanto, um usuário do sistema com privilégios de root pode influenciar isso com os comandos nice e renice.

Na saída do comando top, o NI mostra o valor legal do processo:

top  

Use o comando nice para definir um valor legal para um processo. Lembre-se de que usuários normais podem atribuir um bom valor de zero a 20 aos processos de sua propriedade.
Somente o usuário root pode usar valores agradáveis negativos.

Para renice a prioridade de um processo, use o comando renice da seguinte forma:

renice +8  2687
renice +8  2103

Confira nossos alguns artigos úteis sobre como gerenciar e controlar processos Linux.

  1. Gerenciamento de processos Linux: inicialização, desligamento e tudo mais
  2. Encontre os 15 principais processos por uso de memória com ‘top’ no modo em lote
  3. Encontre os principais processos em execução por maior uso de memória e CPU no Linux
  4. Como encontrar um nome de processo usando o número PID no Linux

É tudo por agora! Se você tiver alguma dúvida ou ideia adicional, compartilhe-a conosco por meio do formulário de feedback abaixo.