Ich entwickle eine Anwendung und möchte, dass sie bei Bedarf einige Laufzeitstatistiken auf die Konsole druckt. kill
und Signale kamen mir sofort in den Sinn.
Das Lesen von Unix-Signalen im Wiki SIGINFO
scheint der richtige Weg zu sein, weil:
- Es ist beabsichtigt , für diese Zwecke
- Beendet den Prozess nicht, wenn der Signalhandler nicht implementiert ist (im Gegensatz zu
SIGUSRx
- siehe hier )
Bei der Überprüfung der Ausgabe von kill -l
scheint es jedoch, dass auf meinem Server dieses Signal nicht implementiert ist.
Meine Fragen sind:
- Warum
SIGINFO
fehlt auf meinem System? Fehlt es auf allen GNU Linux-Systemen? - Gibt es eine einfache Möglichkeit (dh keine Kernel / Glibc-Neukompilierung), um dieses Signal zu aktivieren? Wenn keine, was wäre der harte Weg?
- Welches alternative Signal könnte ich für meine Zwecke verwenden, das keine Nebenwirkungen verursachen würde, wenn es nicht vom Zielprozess behandelt würde? (Ich gehe bereits von keinem aus, da ich im Handbuch des glibc kein anderes geeignetes Signal finden konnte. )
Linux metainfo:
Linux whatever 3.18.2-2-ARCH #1 SMP PREEMPT Fri Jan 9 07:37:51 CET 2015 x86_64 GNU/Linux
Update: Ich suche noch nach weiteren Informationen darüber, warum dieses Signal von anderen Systemen als BSD bedingt ausgeschlossen wird (siehe Kommentare unten). Das Signal scheint für viele Zwecke sehr nützlich zu sein, daher fällt es mir schwer zu glauben, dass es nur eine Frage der Laune ist. Was ist also der wahre Showstopper für die Verfügbarkeit dieses Signals unter Linux?
^T
in der Ausgabe vonstty -a
?dd
mit dem auf meinem Mac verwechselt haben .^T
Während derdd
Ausführung tut nichts auf dem Linux-Rechner - ich werde die Frage entsprechend aktualisieren.Antworten:
Es war die Rede (in den Tagen von Linux 0.x-1.x) darüber, dies hinzuzufügen (weil es auf BSD-Systemen nützlich war), aber wenn ich mich richtig erinnere, gab es Gründe, warum es unter Linux schwieriger war, es richtig zu machen als BSD zu dieser Zeit .
Beachten Sie, dass das, worüber Sie fragen, nur ein kleiner Teil der Funktion ist (Sie sprechen nämlich von einem
stty info
Eintrag für control-T, der bewirkt, dass der KernelSIGINFO
an dietty
Prozessgruppe der Funktion übermittelt ) - dieser Teil ist "einfach" - Wenn der Kernel jedoch Informationen über den Prozessstatus meldet, wenn er das Signal nicht verarbeitet (da zu diesem Zeitpunkt nur sehr wenige Dinge dies unterstützten, ging es in der Funktion hauptsächlich um "Ist dieser Prozess dreht sich oder hängt" und "Was ist der Prozess?" es ist sowieso ") schwieriger - ISTR Es gibt sogar Sicherheits- / Vertrauensprobleme bei der genauen Anzeige dieser Informationen und ob sie mit dem Pfad des sicheren Aufmerksamkeitsschlüssels verknüpft werden sollten. Das heißt, es könnte einen Wert in der "einfachen" Version geben, der nur das Signal sendet ...(Aus dem persönlichen Gedächtnis; eine schnelle Websuche zeigt nichts Offensichtliches, aber ich denke, man müsste in wirklich alten Archiven stöbern, um die Diskussion zu finden.)
quelle
Zu Ihrer Frage 1):
Von
man 7 signal
auf einem Arch Linux-System:Nach dieser Definition ist
SIGINFO
nur auf Alpha- oder Sparc-Architekturen verfügbar.quelle