Was ist mit den 32- und 33-Kill-Signalen passiert?

7

Wenn Sie kill -l in bash und probe Anzahl der Signale eingeben.

Was ist mit den 32- und 33-Kill-Signalen passiert?

    
user1282159 01.10.2012, 20:32
quelle

2 Antworten

2

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

Aber POSIX benötigt nicht SIGRTMIN und SIGRTMAX als Kompilierzeitkonstanten für den User-Land-Code, und in der GNU libc sind sie nicht: wenn Sie eine Quelldatei mit dem Benutzer-land <signal.h> einfügen Durch den Präprozessor (zB mit gcc -E ) sehen Sie, dass SIGRTMIN tatsächlich auf (__libc_current_sigrtmin()) expandiert.

Die Implementation dieser inneren Glibc reserviert mindestens die ersten zwei Werte, die vom Kernel für seine eigenen internen Zwecke unterstützt werden. Der erste von ihnen (das Signal mit der höchsten Priorität) wird verwendet, um die Thread-Löschungsbehandlung zu unterstützen; Die zweite wird für etwas verwendet, das mit der Implementierung von setuid zusammenhängt. (Siehe hier Ich bin nicht sicher, welche Umstände die Fähigkeit nutzen, weitere Signale für den internen Gebrauch zuzuordnen.

Die fehlenden Signalnummern sind daher auf bash zurückzuführen, die Ihnen die Ansicht einer Anwendung auf die verfügbaren Signale zeigt (wobei die von glibc intern verwendeten Signale weggelassen werden) und nicht die Ansicht des Kernels.

    
Matthew Slattery 02.10.2012 00:22
quelle
1

Dies ist nicht Centos fokussiert. Auf Archlinux habe ich:

%Vor%

Wie Sie sehen können, ist% ce_de% immer das gleiche Signal 31 mit einigen Variationen.

Außerdem haben wir in der Quelldatei SIGRTMAX gefunden:

%Vor%

Das bestätigt, dass /usr/include/asm/signal.h & amp; SIGRTMIN sind die größten Signale und haben beide den SIGRTMAX -Wert.

Weitere Informationen zu Signalen in 32

    
Gilles Quenot 01.10.2012 20:46
quelle

Tags und Links