9 Stimmen

Was ist aus den Tötungssignalen 32 und 33 geworden?

Wenn Sie eingeben kill -l in der Bash und Sonde Anzahl der Signale.

Was ist aus den Tötungssignalen 32 und 33 geworden?

3voto

Matthew Slattery Punkte 43123

En POSIX-Echtzeitsignale Option definiert eine Reihe von Signalen aus SIGRTMIN a SIGRTMAX die verschiedene nützliche Eigenschaften haben (z. B. haben sie eine genau definierte Lieferpriorität - niedrigste Signalnummer zuerst - und mehrere Instanzen desselben Signals können in eine Warteschlange gestellt und mit einem Parameter verknüpft werden, und zwar über sigqueue() ). Diese werden vom Kernel mit den Signalnummern 32 aufwärts umgesetzt.

Aber POSIX verlangt nicht SIGRTMIN y SIGRTMAX als Kompilierzeitkonstanten für Benutzerland-Code, und in der GNU libc sind sie es nicht: Wenn Sie eine Quelldatei mit dem Benutzerland <signal.h> durch den Präprozessor (z.B. mit gcc -E ), werden Sie sehen, dass SIGRTMIN erweitert sich tatsächlich auf (__libc_current_sigrtmin()) .

En Implementierung dieser Funktion in der Glibc Reserven mindestens die ersten beiden Werte werden vom Kernel für seine eigenen internen Zwecke unterstützt. Der erste dieser Werte (das Signal mit der höchsten Priorität) wird verwendet, um die Behandlung von Threadabbrüchen zu unterstützen; der zweite wird für etwas verwendet, das mit der Implementierung von setuid . (Siehe aquí . Ich bin mir nicht sicher, unter welchen Umständen die Möglichkeit genutzt wird, weitere Signale zur internen Verwendung zuzuweisen).

Die fehlenden Signalkennzahlen sind also zurückzuführen auf bash zeigt Ihnen die Sicht einer Anwendung auf die verfügbaren Signale (die diejenigen auslässt, die intern von der Glibc verwendet werden) und nicht die Sicht des Kernels.

1voto

Gilles Quenot Punkte 153339

Dies ist nicht auf Centos ausgerichtet. Auf Archlinux habe ich :

$ kill -l
 1) SIGHUP       2) SIGINT       3) SIGQUIT      4) SIGILL       5) SIGTRAP
 6) SIGABRT      7) SIGBUS       8) SIGFPE       9) SIGKILL     10) SIGUSR1
11) SIGSEGV     12) SIGUSR2     13) SIGPIPE     14) SIGALRM     15) SIGTERM
16) SIGSTKFLT   17) SIGCHLD     18) SIGCONT     19) SIGSTOP     20) SIGTSTP
21) SIGTTIN     22) SIGTTOU     23) SIGURG      24) SIGXCPU     25) SIGXFSZ
26) SIGVTALRM   27) SIGPROF     28) SIGWINCH    29) SIGIO       30) SIGPWR
31) SIGSYS      34) SIGRTMIN    35) SIGRTMIN+1  36) SIGRTMIN+2  37) SIGRTMIN+3
38) SIGRTMIN+4  39) SIGRTMIN+5  40) SIGRTMIN+6  41) SIGRTMIN+7  42) SIGRTMIN+8
43) SIGRTMIN+9  44) SIGRTMIN+10 45) SIGRTMIN+11 46) SIGRTMIN+12 47) SIGRTMIN+13
48) SIGRTMIN+14 49) SIGRTMIN+15 50) SIGRTMAX-14 51) SIGRTMAX-13 52) SIGRTMAX-12
53) SIGRTMAX-11 54) SIGRTMAX-10 55) SIGRTMAX-9  56) SIGRTMAX-8  57) SIGRTMAX-7
58) SIGRTMAX-6  59) SIGRTMAX-5  60) SIGRTMAX-4  61) SIGRTMAX-3  62) SIGRTMAX-2
63) SIGRTMAX-1  64) SIGRTMAX

Wie Sie sehen können, ist das, was über 31 ist immer das gleiche Signal SIGRTMAX mit einigen Abweichungen.

Außerdem wird in der Quelldatei /usr/include/asm/signal.h haben wir gefunden:

#define NSIG        32
typedef unsigned long sigset_t;

#endif /* __ASSEMBLY__ */

#define SIGHUP       1
#define SIGINT       2
#define SIGQUIT      3
#define SIGILL       4
#define SIGTRAP      5
#define SIGABRT      6
#define SIGIOT       6
#define SIGBUS       7
#define SIGFPE       8
#define SIGKILL      9
#define SIGUSR1     10
#define SIGSEGV     11
#define SIGUSR2     12
#define SIGPIPE     13
#define SIGALRM     14
#define SIGTERM     15
#define SIGSTKFLT   16
#define SIGCHLD     17
#define SIGCONT     18
#define SIGSTOP     19
#define SIGTSTP     20
#define SIGTTIN     21
#define SIGTTOU     22
#define SIGURG      23
#define SIGXCPU     24
#define SIGXFSZ     25
#define SIGVTALRM   26
#define SIGPROF     27
#define SIGWINCH    28
#define SIGIO       29
#define SIGPOLL     SIGIO
/*
#define SIGLOST     29
*/
#define SIGPWR      30
#define SIGSYS      31
#define SIGUNUSED   31

/* These should not be considered constants from userland.  */
#define SIGRTMIN    32
#define SIGRTMAX    _NSIG

Dies bestätigt, dass SIGRTMIN & SIGRTMAX sind die größten Signale und haben die 32 beides wert.

Weitere Informationen über Signale in man 7 signals

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X