Signal SIGFPE Frage

9

Ich bin Neuling auf den Linux-Signalen, bitte helfen Sie. Der folgende Code erhält einen Core Dump, wenn er in Linux 2.6 gcc ausgeführt wird.

$ ./a.out
Gleitkommaausnahme (Core Dumped)

Die Fragen:
1. Da eine Prozesssignalmaske installiert ist, sollte das durch die Zeile 40 (z = x / y) erzeugte "SIGFPGE" nicht blockiert werden?
2. Wenn es nicht blockiert ist, sollte, da ein Signal-Handler installiert wurde, nicht der "SIGFPE" durch den Signal-Handler statt eines Kern-Dumps erfasst werden?
3. Wenn ich Zeile 40 (z = x / y) auskommentiert und stattdessen Zeile 42 (raise (SIGFPE)) verwende, dann funktioniert alles wie erwartet. Was ist der Unterschied zwischen x / 0 und SIGFPE hier erhöhen?

Hier ist der Code:

%Vor%     
John Crane 08.07.2011, 18:43
quelle

1 Antwort

4

Jeder SIGFPE, der durch eine Hardware-Trap verursacht wird, während das Signal blockiert ist, verursacht undefiniertes Verhalten:

  

Wenn eines der SIGFPE-, SIGILL-, SIGSEGV- oder SIGBUS-Signale erzeugt wird, während sie blockiert sind, ist das Ergebnis undefiniert, es sei denn, das Signal wurde durch die Funktion kill (), die Funktion sigqueue () oder die Erhöhung erzeugt ( ) Funktion.

(aus sigprocmask specification )

    
Ben Voigt 08.07.2011, 18:46
quelle

Tags und Links