Por que o interpretador CPython ignora TERM quando executado no container?

1

Se eu iniciar um processo Python em um contêiner com

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

E tente finalizar isso em outro console com

docker stop python

o intérprete não está parado. Em vez disso, o docker precisa matar o processo após um período de carência (10s por padrão).

No entanto, um simples

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

na linha de comando pode ser abortado imediatamente enviando um TERM para ele.

Qual é o motivo dessa assimetria?

    
por Torsten Bronger 25.08.2018 / 23:58

1 resposta

0

A assimetria vem do próprio UNIX. O Linux ' man 2 kill manpage diz:

The only signals that can be sent to process ID 1, the init process, are those for which init has explicitly installed signal handlers. This is done to assure the system is not brought down accidentally.

Por padrão, o Python não instala manipuladores. Se o interpretador Python não for executado como PID 1, isso significa que a ação padrão é executada, o que para SIGTERM significa anular o processo. Se for executado como PID 1, não há ação padrão. Assim, nada acontece.

    
por 26.08.2018 / 18:52