¿Cómo sobrevive systemd a un kill -9?

28

Entre las preguntas recientes "¿Por qué 'kill -9 0' finaliza mi sesión de consola? Y" Cómo obtener un kernel panic ", obtuve una quemadura debajo de mi silla de montar y probé kill -9 1un portátil Arch Linux en su mayoría actualizado. Lo hice como ID de usuario "root".

Esperaba completamente algún tipo de choque, pánico o apagado, pero no pasó nada. Lo hice de kill -9 1nuevo, sin ningún efecto.

Las máquinas Arch Linux funcionan en systemdestos días, entonces: ¿cómo systemdsobrevive una matanza -9? Espero que haya un código de caso especial en el kernel de Linux 3.7, pero tal vez exista alguna otra razón que no he pensado.

¿Qué pasa con otras cosas que se ejecutan con PID 1? Slackware todavía usa init, creo, pero tengo miedo de probarlo en mi servidor Slackware de producción. DD-WRT en mi enrutador inalámbrico ejecuta / sbin / init de algún tipo.

Bruce Ediger
fuente

Respuestas:

33

De man 2 kill:

Las únicas señales que pueden enviarse al ID de proceso 1, el proceso init, son aquellas para las que init ha instalado explícitamente manejadores de señal. Esto se hace para asegurar que el sistema no se caiga accidentalmente.

Es decir, es posible inithacer lo que quiera al recibir SIGKILL(incluida la salida), pero init de systemd no instala ningún controlador de señal, por lo que no sucede nada.

Chris Down
fuente
44
Gracias por notar eso. ¿Es esto específico de Linux? Me parece recordar haber estrellado una estación de trabajo SunOS a principios de los 90 al matar a init por error. O no. Fui mucho más imprudente en mi juventud.
Bruce Ediger
1
@BruceEdiger, también parece que recuerdo haber sido capaz de kill -9 initprovocar un pánico en el núcleo. Parece que cambió en algún momento.
psusi
2
@BruceEdiger: lo probé para un servidor AIX y uno HP-UX. Ambos devolvieron un mensaje de error: kill: 1: 0403-068 La señal no es válida para este proceso O kill: 1: El proceso especificado no existe. La página del manual menciona específicamente que esto devolverá un error. Varias personas me han dicho que esto se podría hacer anteriormente, pero nadie ha tenido éxito en los últimos 10 años.
DarkHeart
2
@BruceEdiger Parece que, según algunas búsquedas, se trata de un desarrollo reciente (al menos, en términos de vida útil de Unix). Lamentablemente no estaba vivo a principios de los 90, por lo que cuando sucedió está fuera de mi alcance. Sin embargo, sería interesante descubrirlo, ya que parece que casi todos los Unices modernos han cambiado por defecto a este comportamiento.
Chris Down