Qual é a diferença entre os comandos Halt e Shutdown?


Respostas:


77

Geralmente, um usa o shutdowncomando . Permite um atraso de tempo e uma mensagem de aviso antes do desligamento ou reinicialização, o que é importante para a administração do sistema de servidores shell multiusuário; pode fornecer aos usuários um aviso prévio do tempo de inatividade.

Como tal, o comando shutdown deve ser usado assim para interromper / desligar o computador imediatamente (pelo menos no Linux e no FreeBSD):

shutdown -h now

Ou, para reiniciá-lo com um aviso personalizado de 30 minutos:

shutdown -r +30 "Planned software upgrades"

Após o atraso, shutdowninforma initpara alterar para o nível de execução 0 (parada) ou 6 (reinicialização). (Observe que, ao omitir -hou -rfazer com que o sistema entre no modo de usuário único (nível de execução 1), que mata a maioria dos processos do sistema, mas na verdade não interrompe o sistema; ele ainda permite que o administrador permaneça logado como root.)

Depois que os processos do sistema são eliminados e os sistemas de arquivos desmontados, o sistema pára / desliga ou reinicia automaticamente. Isso é feito usando o comando haltoureboot , que sincroniza as alterações nos discos e executa a parada / desligamento real ou a reinicialização.

No Linux, se haltou rebootfor executado quando o sistema ainda não iniciou o processo de desligamento, ele chamará o shutdowncomando automaticamente, em vez de executar diretamente a ação pretendida. No entanto, em sistemas como o FreeBSD , esses comandos primeiro registram a ação wtmpe, em seguida, executam a interrupção / reinicialização imediatamente , sem primeiro interromper os processos ou desmontar os sistemas de arquivos.


Boa explicação!

18
... mas agora desatualizado. Nos sistemas operacionais Linux systemd, esses comandos existem (nas palavras do systemd doco) "apenas para compatibilidade". Há não estão separados halt, reboote shutdownprogramas que invocam o outro. Há um único programa, com muitos analisadores de linha de comando que se direcionam para um caminho de código internamente. Nem existem níveis de execução. O desligamento também não entra no modo de usuário único. De fato, o próprio modo de usuário único foi renomeado. Para detalhes, consulte unix.stackexchange.com/a/196014/5132 .
JdeBP

49

O passado

Na década de 1980, os BSDs tinha halt, reboote shutdown. O sistema 5 UNIX tinha um conjunto de ferramentas de compatibilidade com BSD. Mas, nativamente, possuía um shutdowncomando próprio e diferente ; e não tinha haltou nem rebootum pouco. (Algumas variantes do sistema 5 tinham coisas como as do SCO XENIX haltsys.)

O BSD halte os rebootcomandos eram de baixo nível, drásticos e imediatos. A maneira atenciosa de desligar um sistema BSD era o shutdowncomando, que fazia todas as coisas que se espera que acontecessem: wallmensagens para usuários, serviços cortados normalmente, entradas de log gravadas, logins desativados e assim por diante.

Enquanto os BSDs estavam em grande parte onde a sabedoria recebida originava esses " shutdownexecutivos halt/ reboot", e que estes deveriam ser usados ​​com cuidado; era o mundo do System 5 onde as pessoas aprendiam o hábito contrário que halt/ rebooteram apenas atalhos úteis e nada mais: /usr/ucb/haltdo "Pacote de Compatibilidade BSD", não era diferente shutdown -h. Os dois acabaram fazendo init 0.

Leitura adicional

Hoje

Atualmente, temos uma variedade de possíveis conjuntos de ferramentas de gerenciamento de sistema. Os BSDs ainda possuem seu conjunto de ferramentas, embora eliminado qualquer AT&IS possível nos anos 90. Miquel van Smoorenburg em 1992 (re) escreveu um Linux init+ rce suas ferramentas associadas, que as pessoas agora chamam de "System 5 init", mesmo que não seja realmente o software do UNIX System 5 (e não é apenas init) Há também systemd , arrivista , e comer , cada um dos quais tem suas próprias implementações de halt, reboot, fasthalt, fastboot, e assim por diante.

Os conjuntos de ferramentas também cresceram e mudaram. Agora existe um poweroffcomando, não presente nos sistemas operacionais dos anos 80, porque as Unidades Centrais de Processamento na maioria das máquinas contemporâneas não tinham como controlar suas fontes de alimentação. Os conjuntos de ferramentas do Linux, em particular, adquiriram os comandos BSD; mas, como as ferramentas de compatibilidade com BSD no UNIX System 5, elas não são exatamente exatas e as coisas foram amplamente achatadas.

Esse achatamento nos levou ao ponto em que halte na maior parteshutdown são os mesmos. Mas os detalhes exatos variam de conjunto de ferramentas para conjunto de ferramentas, e a mecânica de cada conjunto de ferramentas é um pouco diferente.

Ele também trouxe-nos para a posição ligeiramente embaraçosa em que este conjunto de comandos se tornou tão enfeitado com opções de compatibilidade que agora permite que as pessoas a dar computadores instruções auto-contraditórias, como reboot --halte poweroff --reboot, como observei na página de manual para o Nosh halt, fasthalt, reboot, fastboot, e poweroffcomandos. ☺

O conjunto de ferramentas systemd

halt, reboot, poweroff, telinit, E shutdownsão todos um programa . Na verdade, é o próprio systemctlprograma do systemd . Ele possui vários analisadores de linha de comando para as várias sintaxes de linha de comando desses comandos, além de suas próprias, mas depois disso, ele se funde amplamente em um caminho de código internamente. Não há diferença entre usar halte suas opções de comando para acionar uma ação e usar shutdowne suas opções de comando para acionar a mesma ação.

O systemd não considera o modo de recuperação (que é o que as pessoas do systemd renomearam para o modo de usuário único ) como um estado desligado do sistema e não pode ser alcançado com nenhum desses comandos. Sem opção shutdown nowé igual a poweroff.

Leitura adicional:

Os BSDs

Os BSDs mantêm amplamente sua semântica dos anos 80. halte, shutdownportanto, não são equivalentes em seus conjuntos de ferramentas. halte rebootsão um único programa; e ainda são de baixo nível, imediatos e drásticos. Considerando que , shutdowne powerofftambém um único programa, faça todas as coisas importantes, como desligamento agendado, gravação de wallmensagens, ações de log, desativação de logon e assim por diante.

Nos conjuntos de ferramentas do BSD, shutdown/ powerofftradicionalmente acabava invocando halt/ rebootpara aprovar a alteração final do estado do sistema. Os (atualmente atualmente incorretos) receberam a sabedoria de que " shutdownexecs halt/ reboot" de fato ainda mantém o NetBSD e o OpenBSD. Mas no FreeBSD / TrueOS / DragonFlyBSD, este é o caso apenas se a -oopção for usada. Nessas BSDs, tanto desses programas normalmente promulgar a mudança final estado do sistema, enviando vários sinais ( INT, USR1e USR2) para processar # 1. initfaz todo o gerenciamento do estado do sistema nesses sistemas.

Em todos eles, a opção menos shutdown nownão é equivalente a qualquer um halt, rebootou poweroff. Ele faz a transição para o modo de usuário único BSD , do qual é possível fazer a transição novamente para o modo multiusuário .

Leitura adicional:

O conjunto de ferramentas nosh

No conjunto de ferramentas de gerenciamento de sistema nosh, halt, fasthalt, poweroff, fastpoweroff, reboot, e fastbootsão todos um programa. É um calço de compatibilidade com versões anteriores que normalmente se acorrenta shutdown, o oposto da sabedoria recebida. A --forceopção faz com que ela acorrente system-control.

Portanto, não há diferença (ausente --force) entre o haltcomando e o shutdowncomando (com a opção equivalente) neste conjunto de ferramentas, pois esse conjunto de comandos "Compatibilidade com o BSD / System 5" é simplesmente uma fina camada de calço por cima shutdown.

Leitura adicional:

O conjunto de ferramentas inicial

Assim como no nosh, no conjunto inicial de ferramentas de gerenciamento de sistemas se aplica o oposto da sabedoria BSD recebida. halt,, reboote poweroffsão todos um programa que normalmente acorrenta a shutdown; a menos que a --forceopção seja usada, o que faz com que o reboot()sistema chame a si próprio.

Portanto, novamente, não há diferença (ausente --force) entre o haltcomando shutdownee comando (com a opção equivalente) neste conjunto de ferramentas. Além disso, novamente, sem opção shutdown now(que nenhuma das halt, rebootou poweroffpode acabar invocando, pois todas definem as opções) coloca o sistema no modo de usuário único em vez de desligá-lo.

Leitura adicional:

O conjunto de ferramentas Linux System 5 init+rc

Novamente, neste conjunto de ferramentas, aplica-se o oposto da sabedoria recebida do BSD halte, rebootsimplesmente, encadeia a shutdown- a menos que o sistema já esteja no poweroff ou interrompa os "níveis de execução", caso em que esses comandos realmente promovem a alteração final do estado do sistema. shutdownpor sua vez, acorrenta a init.

Então, novamente, não há diferença (a menos que o sistema esteja amplamente desligado) entre halte shutdownporque o primeiro apenas invoca o último. E sim, mais uma vez, a opção menos shutdown now(que nenhum halt, rebootou poweroffpode acabar invocando como eles todas as opções definidas) traz o sistema em modo de usuário único , em vez de desligá-lo.


É por isso que o sistema de votação não funciona quando 80% dos eleitores
ychaouche

Você diz que: "parar e reiniciar são um único programa; e ainda são de baixo nível, imediatos e drásticos", o que não parece ser o caso. Estou citando a página de manual de parada do dragonflyBSD, que diz: Os utilitários de parada e reinicialização liberam o cache do sistema de arquivos em disco, enviam todos os processos em execução um SIGTERM (e subseqüentemente um SIGKILL) e, respectivamente, interrompem ou reiniciam o sistema. A ação é registrada, incluindo a inserção de um registro de desligamento no arquivo wtmp (5). Veja: dragonflybsd.org/cgi/web-man?command=halt§ion=ANY
ychaouche

Agora vá e leia a resposta novamente, para um conjunto já explicitamente dado (duas vezes) de coisas que não estão nessa lista; um que também está descrito nos manuais do administrador de sistemas dos vários BSDs.
JdeBP # 03/18

que lista @JdeBP?
precisa saber é o seguinte

11

Eu suspeito que isso seja um pouco dependente da versão do UNIX / Linux que você está usando. No Centos (e eu espero que outro Linux moderno) interrompa o desligamento das chamadas (desde que você não esteja no nível de execução 0 ou 6), para que seu sistema seja desligado corretamente. No Solaris 10, a interrupção é mais brutal, apenas libera os caches de disco e desliga o sistema - não é feita nenhuma tentativa de executar nenhum script ou encerrar as instalações smf .


2

Para aqueles que usam AWS EC2: na AWS shutdown pára uma instância, quando halt termina -lo.


Qual é a diferença entre parar e terminar ?
roaima

Esse é um tópico completamente diferente, estando fora de questão aqui, é por isso que não mencionei. Mas você pode dar uma olhada em docs.aws.amazon.com/AWSEC2/latest/UserGuide/…
dveim

1
Portanto, em sua resposta, você está dizendo que stop faz o que é dito e interrompe a instância, enquanto parar (ou na sua terminologia alternativa, encerrar ) interrompe a instância e a exclui.
roaima

Sim. Mas isso é específico da AWS.
dveim

Ah Eu vejo. O OP não forneceu contexto. Você tem. Obrigado.
roaima

0

No linux, "halt" e "reboot" são aliases do comando shutdown - shutdown -he shutdown -rrespectivamente. O desligamento da palavra de barra geralmente assume -h.


10
Eles não estão aliasesno sentido de aliases de shell, mas sim, haltbasicamente apenas chama shutdown -he rebootexecuta shutdown -r. Observe que se você passar a -fopção (force) para haltou reboot, nãoshutdown será chamada.
Mikel

Na verdade, embora ainda esteja errado, nos sistemas operacionais systemd, a descrição de Shadur aqui está mais próxima da verdade do que a correção de Mikel. Não há "A apenas chama B". Todas são formas alternativas de chamar um único programa , conforme explicado em mais detalhes em unix.stackexchange.com/a/196014/5132 .
JdeBP

@JdeBP Na época em que escrevi esse sistema, ele estava fora por menos de um ano e eu nunca tinha ouvido falar dele, lembre-se. :)
Shadur

1
@JdeBP Eu os equipararia a, digamos, o sendmailcomando neste momento - Assim como os MTAs, na verdade não importa qual sistema init você usa, porque todos reconhecerão ambos shutdowne haltcomo tal.
Shadur

1
Na verdade, isso importa; porque existem diferenças sutis e até mesmo sutis entre os conjuntos de ferramentas. Ironicamente, esse também é o caso do sendmailcomando. É como o sendmailcomando, mas não da maneira que você pensa.
JdeBP
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.