2016-05-11 4 views
0

докер docs обратите внимание на следующее (ж/кода) о том, как запустить clean up после завершения работы в контейнере в:`trap`-ing Linux Signals - SIGSTOP?

Наконец, если вам нужно сделать некоторые дополнительные очистки ... выключение, ..., вы может понадобиться для того, чтобы ENTRYPOINT скрипт принимает сигналы на Unix , передает их дальше, а затем делает несколько больше работать

#!/bin/sh 

trap "echo TRAPed signal" HUP INT QUIT KILL TERM 

/usr/sbin/apachectl start 

Я думаю, что это trap поймает KILL. Тем не менее, я читаю в этом post:

Все сигналы, за исключением SIGKILL и SIGSTOP, могут быть перехвачены процессом.

Однако еще post состояния:

Существует один сигнал, который вы не можете ловушку: SIGKILL или сигнал 9.

Что это?

ответ

1

Вы не можете поймать SIGSTOP. Страница, на которую вы ссылались, была ошибочной.

Да, приведенный выше сценарий пытается поймать сигнал KILL. Это не удается. Вы можете проверить это самостоятельно довольно легко с помощью следующего сценария:

#!/bin/sh 

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

sleep 20 

Попробуйте отправить его уничтожения и стоп-сигналы, вы увидите, что процесс умирает и останавливается, соответственно, без сообщения печати. Если вы попробуете любой другой пойманный сигнал, вы увидите, что они обрабатываются, как ожидалось.

+0

Спасибо за этот ответ. В качестве дополнительной ссылки [wikipedia] (https://en.wikipedia.org/wiki/Unix_signal#Handling_signals) отмечается: «Есть два сигнала, которые нельзя перехватить и обработать: SIGKILL и SIGSTOP.' –

+0

@KevinMeredith, если вы верьте, что это ответили на ваш вопрос, пожалуйста, примите его, нажав V рядом с ответом. –