2016-12-03 3 views
6

По какой-то причине я хочу убить основной процесс python (PID 1) в контейнере докера. Но не оконечные сигналы, такие как SIGTERM, SIGKILL работают. Я имею в виду, что запуск kill -SIGKILL 1 не влияет. Как я могу убить pid 1 изнутри контейнера? Я не хочу запускать docker stop или аналогичные решения.Не удается убить pid 1 внутри контейнера докера с SIGKILL

+0

SIGKILL не будет доставлен в PID 1 таким образом (вместо этого вы можете активировать некоторый обработчик, но это то, что нужно поэкспериментировать) –

+0

Как я могу убить PID 1? (последнее решение запускает код python через 'entrypoint.sh', поэтому код python не будет PID 1) – Pooya

+0

Я обнаружил, что SIGSEGVing это эффективное решение в большинстве случаев. –

ответ

0

Согласно трекеру проблемы Docker и как общая документация состояния pid 1s, вам нужно специально добавить обработчик сигналов и убить процесс от них.

signal.signal(signal.SIGINT, exit_gracefully) 
signal.signal(signal.SIGTERM, exit_gracefully) 

exit_gracefully должна быть определена и в конечном счете называют sys.exit(0).

Это поведение требуется и применяется ядром, поскольку оно не будет вызывать sigaction значение по умолчанию, которое является завершением, на других pids.

Нам нужно сделать что-то подобное в Node.js.