next up previous
Next: Controle da progressão de Up: Processos manipulando sinais: Exemplos Previous: Herança de sinais com

Comunicação entre processos

O programa a seguir é um exemplo simples da utlização das primitivas de emissão e recepção de sinais com o objetivo de permitir a comunicação entre dois processos. A execução deste programa permite ainda de assegurar que o processo executando a rotina de desvio é mesmo aquele que recebeu o sinal.

                 /* arquivo test_kill_signal.c */

/* comunicacao simples entre dois processos
 *  atraves de sinais */

#include <errno.h>
#include <unistd.h>
#include <stdio.h>
#include <signal.h>

void it_fils()
{
   printf("- Sim, sim. E darei um jeito nisso eu mesmo... ARGHH...\n") ;
   kill (getpid(),SIGINT) ;
}

void fils()
{
   signal(SIGUSR1,it_fils) ;
   printf("- Papai conte mais uma vez, como foi que voce me fez?\n") ;
   while(1) ;
}

int main()
{
 int pid ;

  if ((pid=fork())==0) fils() ;
  else {
    sleep(2) ;
    printf("- Filhinho, quer ir passear no reino dos mortos?\n") ;
    kill (pid,SIGUSR1) ;
    sleep(1);
  }
  exit(0);
}

Resultado da execução:

euler:~/> test_kill_signal 
- Papai conte mais uma vez, como foi que voce me fez?
- Filhinho, quer ir passear no reino dos mortos?
- Sim, sim. E darei um jeito nisso eu mesmo... ARGHH...

Um processo criou um filho que parece não estar vivendo muito feliz. Este processo vai enviar então ao filho um sinal SIGUSR1 ao filho. Com a recepção desse sinal, o filho desesperado decide de enviar a si mesmo um sinal SIGINT para se suicidar.



Celso Alberto Saibel Santos 2000-11-14