Signale, die von bash empfangen werden, wenn das Terminal geschlossen wird

8

Verwenden Sie den Trap, um Signale wie folgt zu erfassen:

%Vor%

Und schließe das Terminal mit Gewalt.

Der Inhalt in log.txt ist dann (unter redhat linux):

  

1

     

18

     

1

     

17

     

0

Woher kommen diese Signale?

    
fireworks2 05.04.2011, 01:35
quelle

2 Antworten

8

Das erste Signal ist SIGHUP; das wird an alle Prozesse in der Prozessgruppe gesendet, wenn das Terminal trennt (auflegt - daher HUP).

Das zweite Signal ist SIGCONT (danke, SiegeX, für die Nummern). Das ist etwas überraschend; Es deutet darauf hin, dass Sie im Hintergrund einen Job gestoppt haben, der erneut ausgeführt werden sollte.

Das dritte Signal ist ein weiterer SIGHUP. Dies wurde wahrscheinlich gesendet, um sicherzustellen, dass der fortlaufende Prozess an der Reihe war, zu beenden, aber an die gesamte Prozessgruppe gesendet wurde. (Siehe den POSIX - Standard für Informationen zu Prozessgruppen usw.).

Das vierte Signal ist ein SIGCHLD, das anzeigt, dass ein Kindprozess gestorben ist und die Leiche verfügbar ist (nun, der Status ist verfügbar).

Das letzte Signal, 0, ist das Pseudo-Signal der Schalen, das anzeigt, dass es austritt.

Sie können:

%Vor%

soll 'Tschüß' widerhallen, wenn die Shell aus irgendeinem Grund die Kontrolle verliert. Sie wählen stattdessen die Signalnummer in der Datei. Da die Shell an diesem Punkt austritt, ist dies die letzte Signalnachricht, die angezeigt wird. Sein Elternprozess sollte ein SIGCHLD-Signal erhalten, weil die Shell gestorben ist.

FWIW, unter MacOS X 10.6.7 habe ich Ihren Test durchgeführt. Es gibt kein Signal 32 auf MacOS X, und einige der Abbildungen sind unterschiedlich, und die Reihenfolge der gesendeten Signale ist auch anders:

%Vor%

Die in einem Lauf erfassten Signale waren:

%Vor%

In einem zweiten Lauf habe ich:

%Vor%

Das SIGINT ist zuerst überraschend - ich glaube nicht, dass ich das erklären kann, es sei denn, es bedeutet einfach einen unvollständigen Schreibvorgang (er sollte 20 gelesen haben, aber der SIGHUP verursachte ein Problem). Ich bin mir nicht sicher, ob ich die SIGCHLD-Signale auch erklären kann; die SIGHUP- und die 'exit'-Falle sind wie zuvor.

Bis zu einem gewissen Grad sind die Signale jedoch systemspezifisch - so scheint es. Der SIGHUP ist jedoch üblich und konstant.

    
Jonathan Leffler 05.04.2011, 04:59
quelle
5

Wenn Sie nach den einzelnen Signalen fragen, verwenden Sie kill -l

%Vor%

Beachten Sie, dass ein kill -0 <PID> nichts anderes tut, als einen Exit-Code zurückzugeben, um anzuzeigen, ob ein Signal an den PID gesendet werden kann

    
SiegeX 05.04.2011 01:39
quelle

Tags und Links