2016-12-03 13 views
6

ile docker kapsayıcısının içindeki pid 1'i öldürebilmemden dolayı, docker kabındaki ana python işlemini (PID 1) öldürmek istiyorum. Ancak SIGTERM, SIGKILL gibi sonlandırma sinyalleri çalışmaz. Yani, kill -SIGKILL 1 koşusunun hiçbir etkisi yoktur. Pid 1 kapsayıcısını kapsayıcının içinden nasıl öldürebilirim?? docker stop veya benzeri çözümleri çalıştırmak istemiyorum.SIPKILL

+0

SIGKILL, PID 1'e bu şekilde teslim edilmeyecektir (bunun yerine, bazı işleyiciyi etkinleştirebilirsiniz, ancak denemesi gereken bir şey) –

+0

PID 1'i nasıl öldürebilirim? (en son çözüm python kodunun 'entrypoint.sh' üzerinden çalıştırılmasıdır, böylece python kodu PID olmayacaktır.) – Pooya

+0

SIGSEGVing'in çoğu durumda etkili bir çözüm olduğunu keşfettim. –

cevap

0

Docker sorunu izleyicisine ve pid 1'lerin genel belgelerinin nasıl belirtildiğine göre, özellikle bir işleyiciyi sinyallere eklemeniz ve işlemi bunlardan öldürmeniz gerekir.

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

exit_gracefully

tanımlanmış ve sonunda sys.exit(0) çağrı gerekmektedir.

Bu davranış, çekirdek tarafından sigaction varsayılanı olarak adlandırılmayacağı için kernel tarafından aranıyor ve zorlanıyor, bu da diğer belgelerde sonlandırılıyor.

Node.js. da benzer bir işlem yapmamız gerekiyor.