Como o systemd sobrevive a um kill -9?

28

Entre as perguntas recentes "Por que 'kill -9 0' encerra a sessão do console" e "Como entrar em pânico no kernel", coloquei uma broca na sela e experimentei kill -9 1um laptop Arch linux atualizado. Eu fiz isso como ID do usuário "root".

Eu esperava algum tipo de acidente ou pânico ou desligamento, mas nada aconteceu. Eu fiz de kill -9 1novo, sem efeito.

As máquinas Arch Linux rodam systemdhoje em dia, então: como systemdsobreviver a um kill -9? Espero que exista um código de caso especial no kernel do Linux 3.7, mas talvez exista alguma outra razão na qual eu não tenha pensado.

E quanto a outras coisas executadas com o PID 1? initAcredito que o Slackware ainda use , mas tenho medo de experimentá-lo no meu servidor Slackware de produção. O DD-WRT no meu roteador sem fio executa / sbin / init de algum tipo.

Bruce Ediger
fonte

Respostas:

33

De man 2 kill:

Os únicos sinais que podem ser enviados para o processo ID 1, o processo init, são aqueles para os quais o init instalou explicitamente manipuladores de sinal. Isso é feito para garantir que o sistema não seja desativado acidentalmente.

Ou seja, é possível initfazer o que quiser ao receber SIGKILL(inclusive sair), mas o init do systemd não instala nenhum manipulador de sinal para isso, então nada acontece.

Chris Down
fonte
4
Obrigado por notar isso. Esse Linux é específico? Eu me lembro de ter travado uma estação de trabalho SunOS no início dos anos 90 matando o init por engano. Ou não. Eu era muito mais imprudente na minha juventude.
precisa
1
@ BruceEdiger, também me lembro de ser capaz de kill -9 initinduzir um pânico no kernel. Parece que mudou em algum momento.
Psusi 4/03/13
2
@ BruceEdiger - Eu tentei para um servidor AIX e um servidor HP-UX. Ambos retornaram uma mensagem de erro: kill: 1: 0403-068 O sinal é inválido para este processo OU kill: 1: o processo especificado não existe. A página de manual mencionou especificamente que isso retornará um erro. Foi-me dito por várias pessoas que isso poderia ser feito anteriormente - mas ninguém conseguiu nos últimos 10 anos ou mais.
precisa saber é o seguinte
2
@BruceEdiger Parece que, em algumas pesquisas, esse é um desenvolvimento recente (pelo menos em termos de vida útil do Unix). Infelizmente, eu não estava vivo no início dos anos 90, então, quando aconteceu, estava fora do meu escopo de conhecimento. Seria interessante descobrir, no entanto, como parece que quase todos os Unices modernos mudaram para o padrão para esse comportamento.
Chris Baixo