Wenn Sie eingeben kill -l
in der Bash und Sonde Anzahl der Signale.
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?
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.
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 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.