¿Puede root matar proceso init (el proceso con pid 1)? ¿Cuáles serían sus consecuencias?
Por defecto, no, eso no está permitido. Bajo Linux (desde 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 controladores de señal. Esto se hace para asegurar que el sistema no se caiga accidentalmente.
Pid 1 (init) puede decidir dejarse matar, en cuyo caso el "kill" es básicamente una solicitud para que se cierre. Esta es una forma posible de implementar el haltcomando, aunque no conozco ninguno initque lo haga.
En una Mac, matar launchd(su análogo de inicio) con la señal 15 (SIGTERM) reiniciará inmediatamente el sistema, sin molestarse en cerrar los programas en ejecución sin problemas. Matarlo con la señal inalcanzable 9 (SIGKILL) no hace nada, lo que demuestra que la kill()semántica de Mac es la misma que la de Linux a este respecto.
Por el momento, no tengo una caja de Linux a mano con la que estoy dispuesto a experimentar, por lo que la pregunta de qué hace Linux Y con initcon un SIGTERM tendrá que esperar. initproyectos de reemplazo como Upstart y Systemd siendo populares en estos días, la respuesta podría ser variable.
ACTUALIZACIÓN : En Linux, initignora explícitamente SIGTERM, por lo que no hace nada. @jsbillings tiene información sobre lo que hacen Upstart y Systemd.
initcon una señalSegmentation fault(SIGSEGV), lo que dará como resultado un pánico en el núcleo:kill -SEGV 1El init SysV ignora las señales SIGKILL o SIGTERM. La única señal que causa un cambio de estado es SIGPWR, por lo que puedo decir, que programa un apagado relacionado con la energía.
Parece que Upstart y Systemd tampoco responden a SIGKILL, y de mi prueba, parece que un SIGTERM hace que upstart y systemd se vuelvan a ejecutar.
No estoy seguro de lo que los otros respondedores están ejecutando, pero estoy bastante seguro de que no puede matar -9 (SIGKILL) o kill -15 (SIGTERM) init (pid 1). Lo más probable es que si pudiera, obtendría un kernel panic porque init salió inesperadamente con un código de salida distinto de cero, que sería menos que ideal. No apaga la computadora ni hace que se reinicie.
fuente
Técnicamente sí, root puede emitir un SIGKILL a init. init, sin embargo, difiere de la mayoría, casi de hecho, de otros procesos en que se le permite atrapar e ignorar la señal.
Puede, libremente, matar a init emitiendo un
kill -TERM 1que sería análogo a emitir unhaltoshutdownen ese init pasará la señal a todos los niños, esencialmente todos los demás procesos, antes de honrar la señal en sí.Tenga en cuenta: realizar este comando apagará su sistema.
Por sabor; Un tipo de otro proceso que puede "ignorar" un SIGKILL es uno en reposo ininterrumpido, como uno que espera E / S. Tal proceso podría encontrarse emitiendo un
ps axo stat,commproceso donde los procesos con un estado 'D' son ininterrumpibles.fuente
kill -TERM 1no hará más que causa init para sí re-ejecutivo en la mayoría de los sistemas Linux, y que la única cosa que podría hacer para causar un sistema para apagar el sistema es ejecutarkill -PWR 1kill -TERM 1definitivamente provoca un reinicio (en realidad, revisando la::shutdown:entrada y el script asociado en inittab).Puedes reiniciar el
initproceso. Esto es útil para realizar cambiosinittabsin tener que reiniciar.Fuente: http://www.cyberciti.biz/faq/linux-unix-kill-hup-1-reread-etcinittab-file/
fuente
initSé que esta señal no hace que el proceso se reinicie, sino solo para volver a cargar el/etc/inittabarchivo. ---systemctl daemon-reexecRealmente lo contrariosystemd(initreemplazo en Linux) para volver a ejecutarsudo kill -INT 1(interrupción) reiniciará el sistema ysudo kill -SEGV 1(violación de segmentación) osudo kill -ABRT 1(abortará) generará un kernel panic.nota: se requiere sudo.
fuente
Bueno, la raíz puede matar el proceso de inicio en Linux:
Detalles:
kill -9 1no funcionaEntonces, corramos
strace:fuente
SIGKILLalPID1puesto github.com/torvalds/linux/commit/... se fusionó.Escriba
sudo kill -INT 1, luego vea lo que sucede.fuente