Diferenças

Aqui você vê as diferenças entre duas revisões dessa página.

Link para esta página de comparações

wait [2009/02/22 05:04]
laureano
wait [2009/02/22 05:31] (atual)
laureano
Linha 35: Linha 35:
  
  
 +Para testar o programa, utilize o comando [[kill] do sistema operacional para enviar vários [[sinal|sinais]] ao processo filho.
 +<code c>
 +#include <stdio.h>
 +#include <unistd.h>
 +#include <sys/types.h>
 +#include <sys/wait.h> 
 +
 +int main(void)
 +{
 +   pid_t iPid;
 +   int iStatus;
 +
 +
 +   if( (iPid = fork())<0) /* cria um processo filho */
 +   {
 +      perror("Erro no fork");
 +      return 0;
 +   }
 +
 +   if( iPid != 0) /* no processo pai*/
 +   {
 +      printf("\nCriado o processo %d", iPid);
 +      while(1)
 +      {
 +         printf("\nEsperando o status do filho.");
 +         wait(&iStatus);
 +         printf("\nStatus do filho pego.");
 +
 +         if( WIFEXITED(iStatus) )
 +         {
 +            printf("\nFilho terminou normalmente");
 +            printf("\nO status de término foi %d.", WEXITSTATUS(iStatus));
 +            break;
 +         }
 +         if( WIFSIGNALED(iStatus) )
 +         {
 +            printf("\nFilho recebeu sinal e terminou");
 +            printf("\nO sinal que terminou o filho foi %d.", WTERMSIG(iStatus));
 +            break;
 +         }
 +
 +         if( WIFSTOPPED(iStatus) )
 +         {
 +            printf("\nFilho recebeu sinal stop");
 +            printf("\nO sinal que parou o filho foi %d.", WSTOPSIG(iStatus));
 +         }
 +     }
 +   }
 +   else /* no processo filho */
 +   {
 +      /* fica em loop esperando um sinal via comando kill ou ate terminar */
 +      int i;
 +      printf("\nFilho %d em execucao", getpid());
 +      for(i=0;i<20;i++)
 +      {
 +         printf("\nFilho faltam %d segundos para terminar.", 20-i);
 +         sleep(1);
 +      }
 +   }
 +   return 0;
 +}
 +</code>
  
  --- //[[marcos@laureano.eti.br|Marcos Laureano]] 2009/02/22 04:59//  --- //[[marcos@laureano.eti.br|Marcos Laureano]] 2009/02/22 04:59//
wait.txt · Última modificação: 2009/02/22 05:31 por laureano
CC Attribution-Noncommercial-Share Alike 3.0 Unported
www.chimeric.de Valid CSS Driven by DokuWiki do yourself a favour and use a real browser - get firefox!! Recent changes RSS feed Valid XHTML 1.0