6. Sygnały

Listing 5.1: Definiowanie reakcji procesu na sygnał (str. 37)

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

void f(int sig_num){
   printf("Przechwycenie syg. nr %d\n", sig_num);
}

main(){
   printf("Domyslna obsluga sygnalu\n");
   signal(SIGINT, SIG_DFL);
   sleep(5);
   printf("Ignorowanie sygnalu\n");
   signal(SIGINT, SIG_IGN);
   sleep(5);
   printf("Przechwytywanie sygnalu\n");
   signal(SIGINT, f);
   sleep(5);
}

Listing 5.2: Blokowanie sygnałów (str. 38)

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

void f(int sig_num){
   printf("Przechwycenie sygnalu nr %d\n", sig_num);
}

main(){
   sigset_t zbior;

   sigfillset(&zbior);
   sigprocmask(SIG_BLOCK, &zbior, NULL);
   signal(SIGINT, f);
   printf("Oczekiwanie na sygnaly\n");
   sleep(10);
   sigprocmask(SIG_UNBLOCK, &zbior, NULL);
   printf("Koniec\n");
}

Listing 5.3: Odczyt zgłoszonych sygnałów (str. 39)

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

main(){
   sigset_t zbior, zbior2;

   sigfillset(&zbior);
   sigprocmask(SIG_BLOCK, &zbior, NULL);

   printf("Oczekiwanie na sygnaly\n");
   sleep(10);

   sigpending(&zbior2);
   switch ( sigismember(&zbior2, SIGINT) ){
      case -1: 
         perror("sigismember");
         break;
      case  0: 
         printf("Nie odebrano sygnalu SIGINT\n");
         break;
      case  1: 
         printf("Odebrano sygnal SIGINT\n");
   }
   sigprocmask(SIG_UNBLOCK, &zbior, NULL);
   printf("Koniec\n");
}

Listing 5.4: Zawieszenie procesu w oczekiwaniu na sygnał (str. 40)

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

main(){
   sigset_t maska;

   sigemptyset(&maska);
   sigaddset(&maska, SIGINT);
   sigaddset(&maska, SIGTERM);

   printf("Oczekiwanie na sygnal\n");
   sigsuspend(&maska);
}

Poprzedni temat

5. IPC

Następny temat

1. Zadania (2019/20)

Ta strona