1

Если я запускаю процесс Python в контейнере с

docker run --name python python python3 -c "import time; time.sleep(3600)"

И попробуйте завершить это на другой консоли с

docker stop python

переводчик не останавливается. Вместо этого докер должен завершить процесс по истечении льготного периода (по умолчанию 10 с).

Тем не менее, простой

python3 -c "import time; time.sleep(3600)"

в командной строке можно сразу прервать, отправив ему TERM.

В чем причина этой асимметрии?

1 ответ1

0

Асимметрия проистекает из самой UNIX. Страница man 2 kill man Linux kill говорит:

Единственные сигналы, которые могут быть отправлены в ID процесса 1, процесс init, - это сигналы, для которых init явно установил обработчики сигналов. Это сделано для того, чтобы система не была случайно отключена.

Python по умолчанию не устанавливает никаких обработчиков. Если интерпретатор Python работает не как PID 1, это означает, что выполняется действие по умолчанию, которое для SIGTERM означает прерывание процесса. Если он работает как PID 1, действие по умолчанию отсутствует. Таким образом, ничего не происходит.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .