Você sabia que o comando kill não serve para apenas "matar" um processo? Esta é apenas uma de suas finalidades. Na verdade trata-se de comunicação por sinais, um IPC (InterProcess Communication) muito útil e simples de ser usado. Existem outros sinais que podem ser muito úteis, principalmente em programação C. Os exemplos deste artigo são todos em C.
Sinais é muito legal (e poderia parar por ai nas conclusões! hehehehe).
Conhecer sinais e saber manipulá-los é fundamental para programas realmente sérios. Imagine se você constrói uma aplicação e sai dando kill -HUP nela achando que está tudo bem?
Ainda existem outras chamadas de funções envolvidas no sinal, sendo uma das mais importantes o pause. Executar pause fará o programa travar, parar a execução sem ganhar a CPU até que um sinal (qualquer um) lhe seja enviado. Lembra da estória de processo que escreve e processo que lê na memória? Pois bem, a lógica poderia ser esta:
Processo que lê (PID 7000)
pause();
Processo que escreve:
escreve o que tem que escrever na memória
acorda processo que lê: kill (7000, 10);
Está incompleto, pois fica como desafio!
Existem outras comunicações legais e pretendo descrevê-las em outros artigos. Algumas já estão muito bem documentadas em minha página onde tenho exemplos de códigos comentados.
Como disse outro usuário sábio do VOL estes dias: se nunca for usar, pelo menos é cultura. Linux é isto, saber, conhecer, usar e modificar. Pena que muitos ficam só no usar...
[5] Comentário enviado por rafasmart em 20/05/2008 - 15:27h
Artigo muito bom, parabéns!
só fiquei com uma dúvida... quando envio o mesmo sinal, mais de uma vez para o morroNao.c, ele não é mais tratado pela função morroNao. por exemplo com kill -20 <PID> aparece a mensagem "o seu mane...", mas se novamente fizer kill -20 <PID>, ele fica em STOP; e semelhantemente é finalizado se fizer kill -15 2 vezes. por que?
[6] Comentário enviado por elgio em 20/05/2008 - 15:49h
Opa!
Este comportamento que tiveste não é assim não!
Na minha execução não importa quantas vezes tu envie e em qual ordem, o morroNao só morre com o sinal 9!
[11] Comentário enviado por rafasmart em 20/05/2008 - 16:44h
não era plataforma (testei num x86), eram aquelas opções mesmo(-ansi mais especificamente), compilando sem ela funcionou normal (era um alias que eu tinha deixado para sempre compilar em ansi C)
[15] Comentário enviado por davis.peixoto em 21/05/2008 - 21:41h
cara, seus artigos são sempre muito bons.
De verdade. Às vezes desanimo de acompanhar o VOL por causa de ler dicas do tipo
"Pessoal, vcs pode usar o comando cd para trocar de diretório, o ls para listá-lo e o clear para limpar a tela. Espero ter ajudado com a introdução ao poderoso shell."
Lembro do artigo que você escreveu sobre SYN Flood, ACK Flood. Aquilo me motivou muito a meter mais as caras em padrões e tudo o mais.
Parabéns pelo artigo e obrigado por proporcionar essa leitura.
[17] Comentário enviado por gjr_rj em 30/08/2008 - 01:32h
elgio,
antes de tudo, parabéns. Me esforço para fazer artigos iguais aos seus, quando acho que estou perto, leio um artigo desse e vejo que estou a "anos luz".
[18] Comentário enviado por jefers0n em 25/03/2009 - 20:23h
Elgio, meus parabens. Me ajudou bastante, pois tava tentando entender um pouco mais sobre sinais, ainda falta aprender muita coisa, mas ja me clareou as idéias...Excelente artigo (como sempre).
[23] Comentário enviado por ramon.rdm em 23/04/2011 - 21:13h
Excelente seu artigo companheiro!
Ew nunca ri e aprendi tão bem!
Seus exemplos vão direto ao ponto.
Entrei apenas para resolver um problema da universidade e acabei lendo ele todo.
Meus parabéns!
Abraço!