2016-05-11 27 views
0

Die die Docker docs Note folgende (w/Code) auf, wie clean up auf einen Container ausführen herunterfahren:`Trap`-ing Linux-Signale - SIGSTOP?

Schließlich einige zusätzliche Bereinigung, wenn Sie tun müssen, ... beim Herunterfahren, ..., Sie kann sicherstellen müssen, dass die ENTRYPOINT Skript die Signale Unix empfängt, übergibt sie an, und dann ist etwas mehr Arbeit

#!/bin/sh 

trap "echo TRAPed signal" HUP INT QUIT KILL TERM 

/usr/sbin/apachectl start 

ich denke, dass diese trap einefangenSignal. Jedoch lese ich in diesem post:

Alle Signale außer SIGKILL und SIGSTOP können durch den Prozess abgefangen werden. Jedoch

, eine andere post Staaten:

Es ist ein Signal, dass Sie nicht Falle: SIGKILL oder Signal 9.

Was es ist?

Antwort

1

Sie können SIGSTOP nicht fangen. Die Seite, auf die Sie verwiesen haben, war falsch.

Ja, das obige Skript versucht, das KILL-Signal abzufangen. Es schlägt fehl. Sie können dies selbst ganz leicht mit dem folgenden Skript überprüfen:

#!/bin/sh 

echo "Running shell in pid $$" 
trap "echo TRAPed signal" HUP INT QUIT KILL TERM STOP 

sleep 20 

Probieren Sie es die KILL und STOP-Signale zu senden, werden Sie sehen, dass der Prozess stirbt und hält jeweils ohne die Nachricht gedruckt wird. Wenn Sie ein anderes gefangenes Signal versuchen, werden Sie sehen, dass diese wie erwartet behandelt werden.

+0

Danke für diese Antwort. Als zusätzliche Referenz bemerkt [wikipedia] (https://en.wikipedia.org/wiki/Unix_signal#Handling_signals): 'Es gibt zwei Signale, die nicht abgefangen und behandelt werden können: SIGKILL und SIGSTOP.' –

+0

@KevinMeredith, wenn Sie Glauben Sie, dass dies Ihre Frage beantwortet hat. Bitte akzeptieren Sie sie, indem Sie neben der Antwort auf das V klicken. –