Skocz do zawartości

Obsluga Sygnalow


Burnn

Rekomendowane odpowiedzi

Witam

Problem dotyczy obslugi sygnalow, a mianowicie ponizszy program ma za zadanie odebrac SIGQUIT po czym wyswietlic zawartosc zmiennej - sygnaly. Wynik jest przynajmniej dla mnie nieoczekiwany sygnal osblugiwany z tego co wiem powien byc blokowany (przynajmniej przez sigaction), notomiast po wyslaniu wiekszej ilosci sygnalow w trakcie obslugi tego pierwszego zm syganly przyjmuje wartosc 1000000002 (oczekiwalem raczej 1000000001). Jezeli ktos ma jakis pomysl prosze o pomoc.

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

static volatile sig_atomic_t sygnaly = 0;

void sygnal(int s)
{
while (sygnaly ++ < 1000000000);
}


int main()
{
struct sigaction act;
memset(&act, 0, sizeof(struct sigaction));
act.sa_handler = sygnal;

if (sigfillset(&act.sa_mask) < 0)
 {
  printf("blad\n");
  return 1;
 }

sigaction(SIGQUIT, &act, NULL);
pause();
printf("przechwycono sygnal wart:%ld\n", (long) sygnaly);
sygnaly = 0;
pause();
printf("przechwycono sygnal wart:%ld\n", (long) sygnaly);



return 0;
}

 

Wynik :

przechwycono sygnal wart:1000000002

przechwycono sygnal wart:1000000002

Odnośnik do komentarza
Udostępnij na innych stronach

  • 9 months later...

 

Wynik :

przechwycono sygnal wart:1000000002

przechwycono sygnal wart:1000000002

 

 

Mój wynik (po wysłaniu z innej konsoli SIGQUIT za pomocą: kill -s SIGQUIT pidprocesu):

przechwycono sygnal wart:1000000001

przechwycono sygnal wart:1000000001

 

Mam gcc 4.1.1, może jest bardziej dopracowany niż Twój kompilator.

Odnośnik do komentarza
Udostępnij na innych stronach

Jeśli chcesz dodać odpowiedź, zaloguj się lub zarejestruj nowe konto

Jedynie zarejestrowani użytkownicy mogą komentować zawartość tej strony.

Zarejestruj nowe konto

Załóż nowe konto. To bardzo proste!

Zarejestruj się

Zaloguj się

Posiadasz już konto? Zaloguj się poniżej.

Zaloguj się
×
×
  • Dodaj nową pozycję...