По какой-то причине я хочу убить основной процесс python (PID 1) в контейнере докера. Но не оконечные сигналы, такие как SIGTERM
, SIGKILL
работают. Я имею в виду, что запуск kill -SIGKILL 1
не влияет. Как я могу убить pid 1 изнутри контейнера? Я не хочу запускать docker stop
или аналогичные решения.Не удается убить pid 1 внутри контейнера докера с SIGKILL
6
A
ответ
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.
SIGKILL не будет доставлен в PID 1 таким образом (вместо этого вы можете активировать некоторый обработчик, но это то, что нужно поэкспериментировать) –
Как я могу убить PID 1? (последнее решение запускает код python через 'entrypoint.sh', поэтому код python не будет PID 1) – Pooya
Я обнаружил, что SIGSEGVing это эффективное решение в большинстве случаев. –