Advertisement
Guest User

SO7

a guest
Dec 9th, 2019
113
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C 1.88 KB | None | 0 0
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. #include <signal.h>
  4. #include <unistd.h>
  5.  
  6.  
  7. int pid1, pid2 = 0;
  8. void wyswietlSygnaly(int signal){
  9.     printf("\nMoj nr PID to: %d", getpid());
  10.     printf(" : Numer sygnalu to: %d\n", signal);
  11.     psignal(signal,"\nOtrzymalem sygnal");
  12.  
  13.     return;
  14. }
  15. void wyswietlSygnalQuit(int signal){
  16.     printf("\nMoj nr PID to: %d", getpid());
  17.     printf(" : Numer sygnalu to: %d\n", signal);
  18.     psignal(signal,"\nOtrzymalem sygnal");
  19.     printf("Koniec mojej pracy...\n\n");
  20.     kill(getpid(), SIGKILL);
  21.    
  22.     return;
  23. }
  24. void dlaMacierzystego(int signal){
  25.     printf("\nMoj nr PID to: %d", getpid());
  26.     printf(" : Numer sygnalu to: %d\n", signal);
  27.     psignal(signal,"\nOtrzymalem sygnal");
  28.     kill(pid1, SIGKILL);
  29.     kill(pid2, SIGKILL);
  30.     kill(getppid(), SIGKILL);
  31.     printf("Koniec mojej pracy...\n\n");
  32.    
  33.     return;
  34. }
  35. void sygnalSIGILL(int signal){
  36.     printf("\nMoj nr PID to: %d", getpid());
  37.     printf(" : Numer sygnalu to: %d\n", signal);
  38.     psignal(signal,"\nOtrzymalem sygnal");
  39.     printf("Koniec mojej pracy...\n\n");
  40.    
  41.     kill(getppid(), SIGQUIT);
  42.     return;
  43. }
  44.  
  45. int main(void) {
  46.    
  47.     //PM
  48.     int MPID = getpid();
  49.     printf("Numer procesu macierzystego: %d\n", MPID);
  50.     signal(SIGQUIT, dlaMacierzystego);
  51.      
  52.     if(fork()){
  53.        
  54.         if(fork()){
  55.            
  56.         }else{
  57.            
  58.             //P2
  59.             pid2 = getpid();
  60.             printf("Numer procesu nr 2: %d\n", getpid());
  61.             int i;
  62.             while(1){
  63.                 for(i=1;i<32;i++){
  64.                     switch(i){
  65.                         case SIGILL:
  66.                         signal(SIGILL, sygnalSIGILL);
  67.                         break;
  68.                         case SIGQUIT:
  69.                         signal(SIGQUIT, wyswietlSygnalQuit);
  70.                         break;
  71.                         default:
  72.                         signal(i, wyswietlSygnaly);
  73.                         break;
  74.                     }
  75.                 }
  76.             }
  77.         }
  78.     }
  79.     else{
  80.        
  81.         //P1
  82.         pid1 = getpid();
  83.         printf("Numer procesu nr 1: %d\n", getpid());
  84.         signal(SIGQUIT, wyswietlSygnalQuit);
  85.        
  86.         while(1) {
  87.           printf("$");
  88.           fflush(stdout);
  89.           sleep(1);
  90.        }
  91.        
  92.     }
  93.    
  94.    
  95.     pause();
  96.  
  97.     return 0;
  98. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement