Advertisement
paulogp

Processos e sinais

Jul 14th, 2011
137
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C 1.06 KB | None | 0 0
  1. /* pretende-se que o filho termine depois do pai usando sinais */
  2. // processos e sinais (signal, fork)
  3.  
  4. // Apple Xcode
  5. // paulogp
  6.  
  7.  
  8. #include <stdio.h>
  9. #include <time.h>
  10. #include <signal.h>
  11. #include <unistd.h>
  12.  
  13. int sigflag = 0;
  14.  
  15. void sig_usr (int signo)
  16. {
  17.     sigflag = 1;
  18. }
  19.  
  20. int main (int argc, const char * argv[])
  21. {
  22.     int pid;
  23.     sigset_t newmask, zeromask;
  24.    
  25.     signal(SIGUSR1, sig_usr); // verificar valor de retorno
  26.    
  27.     sigemptyset(&zeromask);
  28.     sigemptyset(&newmask);
  29.     sigaddset(&newmask, SIGUSR1);
  30.     sigprocmask(SIG_BLOCK, &newmask, NULL);
  31.    
  32.     pid = fork();
  33.     if (pid == 0)
  34.     {
  35.         while (sigflag == 0)
  36.         {
  37.             sigsuspend(&zeromask); // wait for parent
  38.         }
  39.        
  40.         printf(">%d\n", getpid());
  41.     }
  42.     else
  43.     {
  44.         printf(":%d\n", getpid());
  45.         kill(pid, SIGUSR1);
  46.     }
  47.    
  48.     printf("\ndone\n");
  49.    
  50.     return 0;
  51. }
  52.  
  53. // nota: se o sinal (signal, sigemptyset, ... ) for gerado
  54. // entre o while e o sigsuspend(), apenas o valor do pai e
  55. // retornado
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement