Apagado elegante de Linux

17

He escuchado que "shutdown -h now" no es un comando de apagado elegante porque hace algo parecido a "kill -9" para todos los procesos, en lugar de "kill -15".

¿Es esto cierto y, de ser así, cuál es una forma más elegante de cerrar para garantizar que todo tenga tiempo de limpiarse?

Ps Usando CentOS, Ubuntu y Debian principalmente.

jwbensley
fuente
Esperaré a que alguien más intervenga, pero eso no suena bien en absoluto. -h solo le dice que coloque el sistema en modo HALT en lugar de reiniciar. Y "ahora" solo significa que no hay período de gracia para que los usuarios cierren. No estoy seguro de cómo alguno de estos modificaría el comportamiento real de apagado del apagado
Jeffery Smith
44
Lea la página del manual para apagar ( man shutdown). Explica esto completamente.
Andrew Schulman el

Respuestas:

15

shutdown -h nowllamará /etc/rc.d/rco /etc/init.d/rc. El rcscript llamará a los scripts de finalización para el nuevo nivel de ejecución (0 para -h, 6 para -r), seguido de los scripts de inicio.

Verás S30killprocso S00killallo algo por el estilo en función de su distribución. Esto se produce después de que todos los scripts de interrupción han sido llamados para intentar detener cada servicio con gracia. Primero lo intentará kill -15, seguido de kill -9.

Respuesta corta: shutdown -h nowo shutdown -r nowson elegantes. halty rebootsolía no ser elegante, pero solo te llamarán shutdowna menos que uses la -fopción.

Cakemox
fuente
12

No, eso no es verdad. shutdowncambia el nivel de inicio que luego ejecuta todos los scripts de apagado. Lo que hacen estos guiones depende del guión. Pero normalmente no finalizan los procesos, sino que les envían la señal para finalizar.

Este es el extracto manual para shutdown:

   shutdown  brings  the system down in a secure way.  All logged-in users
   are notified that the system is going down, and  login(1)  is  blocked.
   It is possible to shut the system down immediately or after a specified
   delay.  All processes are first notified that the system is going  down
   by the signal SIGTERM.  This gives programs like vi(1) the time to save
   the file being edited, mail and news processing programs  a  chance  to
   exit  cleanly,  etc.   shutdown  does  its  job  by signalling the init
   process, asking it to change the runlevel.  Runlevel 0 is used to  halt
   the  system, runlevel 6 is used to reboot the system, and runlevel 1 is
   used to put to system into a state where administrative  tasks  can  be
   performed; this is the default if neither the -h or -r flag is given to
   shutdown.  To see which actions are taken on halt  or  reboot  see  the
   appropriate entries for these runlevels in the file /etc/inittab.
mailq
fuente
1
Bueno, en la mayoría de las distribuciones que he usado, si no en todas, lo último que hace el script rc runlevel 6 (reiniciar) es ejecutar un killall global, para detectar cualquier proceso persistente o bloqueado. Pero esto se ejecuta después de que se hayan completado todos los scripts de detención normales.
Adaptr
2
@adaptr Claro. Pero los procesos tuvieron la oportunidad de terminar con gracia. Si no lo hicieran, no hay otra posibilidad que matarlos.
mailq