Linux slogan
Visite também: Segurança Linux · BR-Linux.org · Dicas-L · Doode · NoticiasLinux · SoftwareLivre.org · UnderLinux



» Screenshot
Linux: Fedora 6
Por asilva
» Login
Login:
Senha:

Se você ainda não possui uma conta, clique aqui.

Esqueci minha senha



Artigo

Sinais em Linux
Linux user
elgio
20/05/2008
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.
Por: Elgio Schlemer | Blog: http://gravatai.ulbra.tche.br/~elgio
[ Hits: 100734 ]
Conceito: 9.9   14 voto(s)14 voto(s)14 voto(s)14 voto(s)14 voto(s) + quero dar nota ao artigo

Comunicações entre processos

O Linux possui diversas formas de realizar comunicação entre processos, também conhecido com IPC. Estas formas de comunicação se referem a processos em execução na mesma máquina, o que não inclui sockets ou RPC (são para comunicação entre máquinas distintas).

Dentre as técnicas de comunicação entre processos fornecidas pelo Linux, convém citar:

a) por memória compartilhada: através de diretivas shm* pode-se disponibilizar uma área de memória comum à vários processos. Simples: quando um processo quer enviar dados ao outro, põe na memória.

b) pipes: um método muito interessante onde se cria um canal bidirecional na tabela de descritores, como se fosse arquivo, mas não é (e não tem I/O). Quando você faz um ls -la | sort está usando pipe!

c) sinais: quando um processo quer sinalizar algo a outro processo. Ao contrário das demais nesta não se envia dados mas apenas um valor numérico.

Existem outras formas de comunicação como semáforos, fila de mensagens e até mesmo morte de filho, que é considerada uma comunicação. Se você digitar ipcs na linha de comando irá ver os canais de comunicação atualmente em uso (não sinais). Minha idéia é falar dos principais tipos de comunicação em diversos artigos, começando por sinais, até para desmistificar o comando kill. Usarei exemplo em C para Linux.

Próxima página >>




Páginas do artigo
   1. Comunicações entre processos
   2. Sinais
   3. Sinais mais importantes
   4. Quando kill não é kill
   5. A chamada de sistema signal
   6. Construindo um "HighLander"
   7. E o tal do SIGALRM?
   8. Conclusão

Outros artigos deste autor

Leitura recomendada

Comentários
[1] Comentário enviado por elgio em 20/05/2008 - 11:43h:

Códigos fontes dos exemplos em C para download neste link:

http://gravatai.ulbra.tche.br/~elgio/disciplinas/?MAT=VOL&DISC=OUTRAS

Estou melhorando os comentários dos mesmos.

[2] Comentário enviado por stremer em 20/05/2008 - 12:17h:

Elgio.
Só posso falar uma coisa do seu artigo!
Fantastico, como sempre!

[3] Comentário enviado por itocamargo em 20/05/2008 - 13:26h:

Muito bom o seu artigo...
parabéns...

[4] Comentário enviado por f_Candido em 20/05/2008 - 14:51h:

Somente duas palavras:
Muito bom.

Parabéns

[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!

[7] Comentário enviado por elgio em 20/05/2008 - 15:53h:

Alias, olha que interessante!

Com o morroNao em uma janela, redimensione ela (a janela).
Veras que o morroNao recebe o sinal 28!

[8] Comentário enviado por rafasmart em 20/05/2008 - 16:06h:

será que tem alguma coisa a ver com a minha plataforma?
Ubuntu Gutsy - 64 bits (x86_64)?

[9] Comentário enviado por rafasmart em 20/05/2008 - 16:29h:

compilando com a opção p/ i386 ele não morre (exceto pelo sinal 9):

gcc -m386 -o morronao morronao.c

e antes eu estava compilando com as opções
-Wall -ansi -pedantic

[10] Comentário enviado por elgio em 20/05/2008 - 16:39h:

Muito estranho!
Seria um BUG?

Testa se isto resolve:
void morroNao(int sinal)
{
signal(sinal, morroNao);

printf("\n\n*** O seu MANE, eu sou imortal ***\n");
printf("*** Nao eh por causa do sinalzinho %i que vou perecer!!\n\n",
sinal);
}

Agora ao chamar a morroNao a mesma se auto redefine.


[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)

[12] Comentário enviado por rodrigoleme em 20/05/2008 - 19:49h:

muito bom!
parabéns!

[13] Comentário enviado por monsores em 20/05/2008 - 21:51h:

Artigo excelente!!!
Para mim o 'kill' era apenas um assassino. :-)

[14] Comentário enviado por iagoaugusto em 21/05/2008 - 18:09h:

huhuahauahauahaua bom artigo....

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

[16] Comentário enviado por marcosmiras em 23/05/2008 - 10:16h:

Meu...
Excelente!

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

abraço e até mais.

[19] Comentário enviado por maiconkist em 12/07/2009 - 20:01h:

Bastante esclarecedor.


Parabéns.

[20] Comentário enviado por Snock em 29/07/2009 - 22:35h:

Manda o sinal 35 pro morroNao que ele morre sim ^^

[21] Comentário enviado por elgio em 29/07/2009 - 22:42h:

Sim, sinais de tempo real também são do tipo não mascaráveis, assim como o 9.


[22] Comentário enviado por julio_hoffimann em 12/01/2010 - 10:42h:

Elgio Schlemer,

Simplesmesnte esclarecedor!!!!
Poupou horas de estudo para um bom entendimento, agora tenho base para ir mais a fundo nesses conceitos. Obrigado!

Parabéns!!

[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!

[24] Comentário enviado por tortugo em 26/04/2011 - 22:25h:

Elgio,

excelente artigo! Vou colocar um link no meu blog http://johntortugo.wordpress.com/


JT


Contribuir com comentário


  
Para executar esta ação você precisa estar logado no site, caso contrário, tudo o que for digitado será perdido.
Responsável pelo site: Fábio Berbert de Paula - Conteúdo distribuído sob licença GNU FDL
Site hospedado por:

Viva o Linux

A maior comunidade Linux da América Latina! Artigos, dicas, tutoriais, fórum, scripts e muito mais. Ideal para quem busca auto-ajuda em Linux.