Qual è la differenza tra i comandi Halt e Shutdown?


Risposte:


77

Generalmente, si usa il shutdowncomando . Consente un ritardo e un messaggio di avviso prima dell'arresto o del riavvio, che è importante per l'amministrazione del sistema di server shell multiutente; può fornire agli utenti un preavviso dei tempi di fermo.

Pertanto, il comando shutdown deve essere usato in questo modo per arrestare / spegnere immediatamente il computer (almeno su Linux e FreeBSD):

shutdown -h now

O per riavviarlo con un preavviso personalizzato di 30 minuti:

shutdown -r +30 "Planned software upgrades"

Dopo il ritardo, shutdownindica initdi passare al runlevel 0 (arresto) o 6 (riavvio). (Si noti che omettendo -ho facendo -rpassare il sistema in modalità utente singolo (runlevel 1), che uccide la maggior parte dei processi del sistema ma non lo interrompe effettivamente; consente comunque all'amministratore di rimanere connesso come root.)

Una volta che i processi di sistema sono stati interrotti e i filesystem sono stati smontati, il sistema si arresta / si spegne o si riavvia automaticamente. Questo viene fatto usando il comando haltoreboot , che sincronizza le modifiche ai dischi e quindi esegue l'arresto / spegnimento effettivo o il riavvio.

Su Linux, se halto rebootviene eseguito quando il sistema non ha già avviato il processo di spegnimento, invocherà shutdownautomaticamente il comando anziché eseguire direttamente l'azione prevista. Tuttavia, su sistemi come FreeBSD , questi comandi prima registrano l'azione wtmpe quindi eseguono immediatamente l'arresto / riavvio, senza prima aver ucciso i processi o smontare i filesystem.


Buona spiegazione

18
... ma ora obsoleto. Sui sistemi operativi Linux di sistema, questi comandi esistono (nelle parole del doco di sistema) "solo per compatibilità". Ci non sono separati halt, reboote shutdownprogrammi che richiamano l'un l'altro. C'è un solo programma, con molti parser da riga di comando che si incanalano internamente in un percorso di codice. Né ci sono livelli di esecuzione. Né lo spegnimento va in modalità utente singolo. In effetti, la stessa modalità utente singolo è stata rinominata. Per i dettagli, consultare unix.stackexchange.com/a/196014/5132 .
JdeBP,

49

Il passato

Nel 1980, i BSD avevano halt, reboote shutdown. System 5 UNIX aveva un set di strumenti di compatibilità BSD. Ma nativamente aveva un suo shutdowncomando diverso ; e non ce l'avevo halto rebootaffatto. (Alcune varianti di System 5 avevano cose come SCO XENIX haltsys.)

Il BSD halte i rebootcomandi erano di basso livello, drastici e immediati. Il modo premuroso di spegnere un sistema BSD era il shutdowncomando, che faceva tutte le cose che ci si aspetta che accadano: wallmessaggi agli utenti, servizi uccisi con grazia, voci di registro scritte, accessi disabilitati e così via.

Mentre i BSD erano in gran parte il luogo in cui la saggezza ricevuta aveva origine che " shutdownexecs halt/ reboot", e che questi ultimi dovevano essere usati con cura; era il mondo di System 5 in cui le persone imparavano l'abitudine contraria che erano halt/ rebooterano solo utili scorciatoie e niente di più: /usr/ucb/haltdal "Pacchetto di compatibilità BSD", non era diverso a tutti gli effetti shutdown -h. Entrambi hanno finito per farlo init 0.

Ulteriori letture

Oggi

Al giorno d'oggi, abbiamo una gamma di possibili set di strumenti di gestione del sistema. I BSD hanno ancora il loro set di strumenti, sebbene purificato da ogni possibile AT & Tisms negli anni '90. Miquel van Smoorenburg nel 1992 (ri) scrisse un Linux init+ rce i loro strumenti associati, che la gente ora chiama "System 5 init", anche se in realtà non è il software di UNIX System 5 (e non è solo init). Ci sono anche systemd , arrivista , e gustare uno spuntino , ognuno dei quali ha le proprie implementazioni di halt, reboot, fasthalt, fastboot, e così via.

Anche i set di strumenti sono cresciuti e cambiati. Ora c'è un poweroffcomando, non presente nei sistemi operativi degli anni '80 perché le Unità di elaborazione centrale sulla maggior parte delle macchine contemporanee non avevano modo di controllare i loro alimentatori. I set di strumenti Linux in particolare hanno acquisito i comandi BSD; ma come gli strumenti di compatibilità BSD su UNIX System 5, non sono esatti workalikes e le cose sono state ampiamente appiattite.

Questo appiattimento ci ha portato al punto in cui halte per lo piùshutdown sono gli stessi. Ma i dettagli esatti variano da set di strumenti a set di strumenti e la meccanica di ciascun set di strumenti è leggermente diversa.

E ci ha anche portato alla posizione un po 'imbarazzante in cui questo gruppo di comandi è diventato così addobbato con opzioni di compatibilità che ora permette alle persone di dare computer istruzioni contraddittorie come reboot --halte poweroff --reboot, come ho notato nella pagina di manuale per l'gustare uno spuntino halt, fasthalt, reboot, fastboot, e poweroffcomandi. ☺

Il set di strumenti di systemd

halt, reboot, poweroff, telinit, E shutdownsono tutto un programma . In realtà è il systemctlprogramma di systemd . Dispone di diversi parser della riga di comando per le varie sintassi della riga di comando di tali comandi, oltre che dei propri, ma in seguito viene in gran parte incanalato in un percorso di codice internamente. Non c'è alcuna differenza tra l'utilizzo halte le sue opzioni di comando per attivare un'azione e l'utilizzo shutdowne le sue opzioni di comando per attivare la stessa azione.

systemd non considera la modalità di salvataggio (che è quella che la gente del sistema ha rinominato la modalità utente singolo ) come uno stato di spegnimento del sistema e non è raggiungibile con nessuno di questi comandi. Opzione-less shutdown nowè uguale a poweroff.

Ulteriori letture:

I BSD

I BSD mantengono in gran parte la loro semantica degli anni '80. halte shutdownquindi non sono molto equivalenti nei loro set di strumenti. halte rebootsono un unico programma; e sono ancora di basso livello, immediati e drastici. Considerando shutdownche poweroff, e anche un singolo programma, fanno tutte le cose premurose come l'arresto programmato, la scrittura di wallmessaggi, le azioni di registrazione, la disabilitazione dell'accesso e così via.

Nei set di strumenti BSD, shutdown/ powerofftradizionalmente finiva per invocare halt/ rebootper attuare il cambiamento finale dello stato del sistema. Il (spesso al giorno d'oggi errato) ha ricevuto la saggezza che " shutdownexecs halt/ reboot" in effetti continua su NetBSD e OpenBSD. Ma su FreeBSD / TrueOS / DragonFlyBSD è solo il caso se -osi utilizza l' opzione. Su questi sistemi BSD, entrambi di questi programmi normalmente emanare il cambiamento di stato del sistema finale con l'invio di vari segnali ( INT, USR1, e USR2) per elaborare 1 #. initesegue tutta la gestione dello stato del sistema su questi sistemi.

Su tutti loro, l'opzione-meno shutdown nownon è equivalente a qualsiasi halt, rebooto poweroff. Passa alla modalità utente singolo BSD , da cui è possibile tornare alla modalità multiutente .

Ulteriori letture:

Il set di strumenti nosh

Nella gestione del sistema toolset gustare uno spuntino, halt, fasthalt, poweroff, fastpoweroff, reboot, e fastbootsono tutti un unico programma. È uno spessore di retrocompatibilità che normalmente si concatena shutdown, l' opposto della saggezza ricevuta. L' --forceopzione rende invece la catena system-control.

Quindi non c'è alcuna differenza (assente --force) tra il haltcomando e il shutdowncomando (con l'opzione equivalente) in questo set di strumenti, poiché questa serie di comandi "Compatibilità BSD / System 5" è semplicemente un sottile strato di spessore sopra la parte superiore di shutdown.

Ulteriori letture:

Il set di strumenti upstart

Come con nosh, nel set di strumenti di gestione del sistema upstart si applica l'opposto della saggezza BSD ricevuta. halt, reboote poweroffsono tutti un programma, che normalmente si concatena shutdown; a meno che non --forcevenga utilizzata l' opzione, il che la rende reboot()chiamata al sistema stessa.

Quindi, ancora una volta, non c'è alcuna differenza (assente --force) tra il haltcomando e il shutdowncomando (con l'opzione equivalente) in questo set di strumenti. Anche in questo caso, l'opzione-less shutdown now(che nessuno dei due halt, rebooto poweroffpuò finire per invocare mentre impostano tutte le opzioni) porta il sistema in modalità utente singolo invece di spegnerlo.

Ulteriori letture:

Il set di strumenti di Linux System 5 init+rc

Anche in questo set di strumenti il contrario di saggezza BSD ricevuto applica ed halte rebootsemplicemente catena shutdown- a meno che il sistema è già in spegnimento o arresto "run-livelli", nel qual caso questi comandi effettivamente mettono in scena il cambiamento di stato del sistema finale. shutdowna sua volta incatena a init.

Quindi, di nuovo, non c'è differenza (a meno che il sistema non sia già in gran parte spento) tra halte shutdownperché il primo invoca solo il secondo. E sì, ancora una volta, l'opzione-less shutdown now(che nessuno di halt, rebooto poweroffpuò finire invocando in quanto tutte le opzioni di set) porta il sistema in modalità utente singolo , piuttosto che chiuderlo.


Questo è il motivo per cui il sistema di voto non funziona quando l'80% degli elettori
ychaouche

Dici che "l'arresto e il riavvio sono un singolo programma e sono ancora di basso livello, immediati e drastici", il che non sembra essere il caso. Sto citando la pagina man halt di dragonflyBSD che dice: Le utility halt e reboot scaricano la cache del file system su disco, inviano tutti i processi in esecuzione un SIGTERM (e successivamente un SIGKILL) e, di conseguenza, arrestano o riavviano il sistema. L'azione viene registrata, incluso l'inserimento di un record di arresto nel file wtmp (5). Vedi: dragonflybsd.org/cgi/web-man?command=halt§ion=ANY
ychaouche

Ora vai a leggere di nuovo la risposta, per un insieme già esplicitamente indicato (due volte) di cose che non figurano nell'elenco; uno che è anche spiegato nei vari manuali dell'amministratore di sistema di BSD.
JdeBP,

quale elenco @JdeBP?
ychaouche,

11

Sospetto che ciò dipenda in qualche modo dalla versione di UNIX / Linux che stai utilizzando. Su Centos (e mi aspetto che altri Linux moderni) arrestino l'arresto delle chiamate (a condizione che tu non sia al runlevel 0 o 6), quindi il tuo sistema verrà spento in modo pulito. Su Solaris 10 l'arresto è più brutale, svuota semplicemente le cache del disco e spegne il sistema - non viene fatto alcun tentativo di eseguire script o arrestare le strutture smf .


2

Per coloro che usano AWS EC2: su AWS shutdown arresta un'istanza, quando la halt termina .


Qual è la differenza tra stop e terminate ?
roaima,

Questo è un argomento completamente diverso, essendo qui fuori, ecco perché non l'ho menzionato. Ma puoi dare un'occhiata a docs.aws.amazon.com/AWSEC2/latest/UserGuide/…
dveim

1
Quindi, nella tua risposta, stai dicendo che stop fa ciò che dice e interrompe l'istanza, mentre halt (o nella tua terminologia alternativa, termina ) interrompe l'istanza e la elimina.
roaima,

Sì. Ma questo è specifico per AWS.
Dveim,

Ah. Vedo. Il PO non ha fornito contesto. Hai. Grazie.
roaima,

0

In Linux, "halt" e "reboot" sono alias del comando shutdown - shutdown -he shutdown -rrispettivamente. L'arresto di Bareword presuppone generalmente -h.


10
Non sono aliasesnel senso di alias di shell, ma sì, haltfondamentalmente solo chiama shutdown -he rebootcorre shutdown -r. Notare che se si passa l' -fopzione (force) a halto reboot, nonshutdown viene chiamata.
Mikel,

In realtà, sebbene sia ancora sbagliato, sui sistemi operativi di sistema la descrizione di Shadur qui è più vicina alla verità di quanto non sia la correzione di Mikel. Non c'è "A chiama solo B". Sono tutti modi alternativi di invocare un singolo programma , come spiegato in maggior dettaglio su unix.stackexchange.com/a/196014/5132 .
JdeBP,

@JdeBP Quando ho scritto questo sistema era fuori per meno di un anno e non ne avevo mai sentito parlare, mente. :)
Shadur,

1
@JdeBP sendmailA questo punto li equiparerei, per esempio, al comando - Come con gli MTA, in realtà non importa quale sistema init usi perché tutti riconosceranno entrambi shutdowne haltcome tali.
Shadur,

1
In realtà, importa; perché ci sono differenze sottili, e in verità poco chiare, tra set di strumenti. Ironia della sorte, questo è anche il caso del sendmailcomando. È come il sendmailcomando, ma non nel modo in cui pensi.
JdeBP,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.