Desligamento Gracioso do Linux

17

Ouvi dizer que "shutdown -h now" não é um comando de desligamento normal porque faz algo semelhante a "kill -9" para todos os processos, em oposição a "kill -15".

Isso é verdade? Em caso afirmativo, qual é a maneira mais graciosa de desligar para garantir que tudo tenha tempo de se limpar depois de si mesmo?

Ps Usando principalmente o CentOS, Ubuntu e Debian.

jwbensley
fonte
Vou esperar alguém entrar, mas isso não parece certo. -h está apenas dizendo para colocar o sistema no modo HALT em vez de reiniciar. E "agora" significa apenas que não há período de carência para os usuários encerrarem. Não sei como qualquer um destes seria modificar o comportamento matar real de desligamento
Jeffery Smith
4
Por favor, leia a página do manual para shutdown ( man shutdown). Isso explica isso completamente.
Andrew Schulman

Respostas:

15

shutdown -h nowligará /etc/rc.d/rcou /etc/init.d/rc. O rcscript chamará os scripts kill para o novo nível de execução (0 para -h, 6 para -r), seguido por qualquer script de início.

Você verá S30killprocsou S00killallou algo assim, dependendo da sua distro. Isso ocorre depois que todos os scripts de interrupção foram chamados para tentar parar cada serviço normalmente. Ele tentará kill -15primeiro, seguido por kill -9.

Resposta curta: shutdown -h nowou shutdown -r nowsão graciosas. halte rebootcostumava ser discreto, mas eles ligam shutdownpara você, a menos que você use a -fopção.

Cakemox
fonte
12

Não, isso não é verdade. shutdownaltera o nível init, que executa todos os scripts de desligamento. O que esses scripts fazem depende do script. Mas eles normalmente não encerram processos, mas enviam o sinal para que terminem.

Portanto, este é o trecho do 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
fonte
11
Bem, na maioria das distros que eu usei, se não todas, a última coisa que o script rl de nível 6 (reinicialização) rc faz é executar um killall global, para capturar qualquer processo persistente ou travado. Mas isso é executado após a conclusão de todos os scripts de parada normais.
adaptr
2
@adaptr Claro. Mas os processos tiveram a chance de terminar normalmente. Caso contrário, não há outra possibilidade senão matá-los.
mailq