Processos no Linux

Este artigo descreve de maneira básica o tão importante conceito de processos no Linux e, em seguida, mostra quais os meios mais usados para controlá-los e manipulá-los.

[ Hits: 158.899 ]

Por: Emerson Alecrim em 23/11/2005


Sinais de processos



Os sinais são meios usados para que os processos possam se comunicar e para que o sistema possa interferir em seu funcionamento. Por exemplo, se o usuário executar o comando kill para interromper um processo, isso será feito por meio de um sinal.

Quando um processo recebe um determinado sinal e conta com instruções sobre o que fazer com ele, tal ação é colocada em prática. Se não houver instruções pré-programadas, o próprio Linux pode executar a ação de acordo com suas rotinas.

Entre os sinais existentes, tem-se os seguintes exemplos:
  • STOP - esse sinal tem a função de interromper a execução de um processo e só reativá-lo após o recebimento do sinal CONT;
  • CONT - esse sinal tem a função de instruir a execução de um processo após este ter sido interrompido;
  • SEGV - esse sinal informa erros de endereços de memória;
  • TERM - esse sinal tem a função de terminar completamente o processo, ou seja, este deixa de existir após a finalização;
  • ILL - esse sinal informa erros de instrução ilegal, por exemplo, quando ocorre divisão por zero;
  • KILL - esse sinal tem a função de "matar" um processo e é usado em momentos de criticidade.

O kill também é um comando que o usuário pode usar para enviar qualquer sinal, porém, se ele for usado de maneira isolada, ou seja, sem o parâmetro de um sinal, o kill por padrão executa o sinal TERM.

A sintaxe para a utilização do comando kill é a seguinte:

kill -SINAL PID

Como exemplo, vamos supor que você deseja interromper temporariamente a execução do processo de PID 4220. Para isso, pode-se usar o seguinte comando:

$ kill -STOP 4220

Para que o processo 4220 volte a ser executado, basta usar o comando:

$ kill -CONT 4220

Se o sinal precisa ser enviado a todos os processos, pode-se usar o número -1 no lugar do PID. Por exemplo:

$ kill -STOP -1

Como já dito, usar o comando kill isoladamente - por exemplo, kill 4220 - faz com que este use o sinal TERM por padrão. Esse sinal, no entanto, pode ser ignorado pelos processos. É por isso que é boa prática usar o comando "kill -9 PID" para "matar" um processo, pois o número nove representa o sinal kill e este não pode ser ignorado. Isso deixa claro que se você conhecer o número que é atribuído a um sinal, você pode usá-lo no lugar de seu nome. Com exceção de alguns sinais, a numeração de cada um pode mudar de acordo com a distribuição ou com a versão do kernel.

Agora, imagine que você não saiba qual o PID de um processo e tenha se esquecido que o comando ps (visto mais à frente) descobre tal informação. Neste caso, pode-se usar o comando killall, desde que você saiba o nome do processo. A sintaxe é:

killall -SINAL processo

Por exemplo:

$ killall -STOP vi

Estado dos processos


Quando um processo é criado, isso não significa que ele será imediatamente executado. Além disso, determinados processos podem ser temporariamente paralisados para que o processador possa executar um processo prioritário. Isso quer dizer que os processos, em certos momentos, podem estar em situações de execução diferentes. O Linux trabalha, essencialmente, com quatro tipos de situação, isto é, estados:
  • Executável: o processo pode ser executado imediatamente;
  • Dormente: o processo precisa aguardar alguma coisa para ser executado. Só depois dessa "coisa" acontecer é que ele passa para o estado executável;
  • Zumbi: o processo é considerado "morto", mas, por alguma razão, ainda existe;
  • Parado: o processo está "congelado", ou seja, não pode ser executado.

Página anterior     Próxima página

Páginas do artigo
   1. Introdução
   2. Sinais de processos
   3. Comandos nice e renice
   4. Verificando processos com o ps
   5. Verificando processos com o top
   6. Os recursos jobs, fg e bg, fuser, pstree, nohup
Outros artigos deste autor

Usando cron e crontab para agendar tarefas

Máquina Virtual Java (Java Virtual Machine)

O gerenciador de boot GRUB

Leitura recomendada

Afrescalhando o Slackware

Instalando OpenBSD no vmware

Babytrans, o Babylon for Linux

CentOS como terminal server autenticando em Windows Server 2003 Active Directory com montagem automática de compartilhamentos de rede

Instalando Redmine 2.x no Debian Wheezy com Apache Passenger

  
Comentários
[1] Comentário enviado por mascote24 em 23/11/2005 - 10:19h

Parabéns Weber, excelente artigo !

Para conhecer/saber como funcionam processos nos *nix está completo. Começar a aprender com este artigo é no mínimo começar por um bom começo.

Acrescentei-o aos meus favoritos.

[2] Comentário enviado por mms_ba em 23/11/2005 - 16:03h

Parabens pela qualidade/ conteúdo do material. :) Ja adicionei aqui nos favoritos.

[3] Comentário enviado por silviojunior em 23/11/2005 - 19:37h

Artigo de excelente qualidade!

[4] Comentário enviado por in54no em 23/11/2005 - 21:24h

Muito bom,
Parabens!

[5] Comentário enviado por Cybertitan em 24/11/2005 - 01:55h

Otimo artigo, resumiu muito bem, esta de parabens.

[6] Comentário enviado por luiscarlos em 24/11/2005 - 10:29h

Sempre percebi que a maquina depois de inciar mesmo com os serviços não essenciais todos parados, ainda rodam em médiua de 60 a 70 processos, a maioria em estado sleeping ou em espera, alguém sabe quais os processos minimos necessários para que a maquina funciona usando o mínimo de memória? eu gostaria de rodar uma console com o mínimo necessário e tmb depois rodar o KDE com o mínimo necesário, já retirei tudo que nao precisava, mas ainda tem muito processo, queria diminuir pra uns 30 no maximo

[7] Comentário enviado por xith em 24/11/2005 - 17:24h

Cara parabens pelo artigo, tirei uma duvida vital nele!
Excelente

[8] Comentário enviado por PCMasterPB em 26/11/2005 - 17:50h

Realmente muito bom esse artigo! Emerson, você está de parabéns!!!

[9] Comentário enviado por brunomark em 01/08/2006 - 19:41h

Excelente material Emerson, matéria fundamental para sobreviver no modo texto

[10] Comentário enviado por decohab em 17/10/2006 - 13:42h

Legal einh boa dica para iniciantes
Ai vai mais um bom tutorial pra galera GNU
http://www.vivaolinux.com.br/artigos/verArtigo.php?codigo=4152&pagina=6

Só uma complementação a vezes até util para não deixar o SHELL preso é usar recursos em background .. util para quando se quer copiar arquivos acima de 200 megas e não se ker ficar preso esperando terminar.. basta usar no final do comando &.

ex.

# cp arquivo.xxx /home &

!!Valew!!!

[11] Comentário enviado por cassimirinho em 16/01/2008 - 13:52h

Uma pergunta sobre processos, a cada reinício do sistema o número do PID é sempre o mesmo pra cada "executável" ?

[12] Comentário enviado por stickybit em 21/01/2009 - 17:04h

Vale lembrar que, os números nice vão de -20a +19. Qualquer usuário pode iniciar um processo com um número nice positivo, mas apenas o superusuário (root) pode diminuir o número nice de um processo, aumentando com isso a sua prioridade.

[13] Comentário enviado por thiagomadeira em 04/01/2013 - 09:51h

Maninho muito bom o seu artigo, parabéns !!!

[14] Comentário enviado por removido em 23/01/2014 - 10:18h

Excelente artigo! Obrigado por compartilhar conhecimento!


Contribuir com comentário




Patrocínio

Site hospedado pelo provedor RedeHost.
Linux banner

Destaques

Artigos

Dicas

Tópicos

Top 10 do mês

Scripts