Utilizzo del comando terminale per spegnere, riavviare e mettere in pausa il mio Mac?


120

Mi sto interessando di più all'utilizzo di Terminal come metodo alternativo per indirizzare soluzioni sul mio Mac. Ho visto questa domanda intitolata "Esiste un modo migliore per arrestare / riavviare OSX?" .

Vorrei quindi sapere:

Come spegnere, riavviare e mettere in pausa il mio Mac usando esclusivamente il comando Terminale?


riavvio per riavvio funziona anche.
Atilkan,

Risposte:


147

Il comando che stai cercando è shutdown . Ciò informa tutti gli utenti che la macchina verrà arrestata e indica a tutte le app di chiudere i file, ecc.

Il comando accetta un parametro -h, -r o -s per spegnere, riavviare o mettere in pausa il Mac.

Il comando deve essere eseguito come root, quindi è necessario utilizzare sudo.

ad es. per riavviare immediatamente la macchina

sudo shutdown -r now

ad es. per spegnere la macchina in 60 minuti

sudo shutdown -h +60

Dai commenti ci sono due cose da affrontare

Il modo in cui funziona lo spegnimento è l'invio di un sigterm a tutti i processi che dovrebbero quindi occuparsi, ad esempio, di salvare file aperti, ecc. Se non escono, riceveranno un SIGKILL che li costringe a morire senza possibilità di risposta. I segnali non vengono inviati tramite la normale coda di messaggi chiave, quindi le App devono occuparsene separatamente al codice che viene chiamato dall'uscita dal menu. Una buona app dovrebbe chiamare il codice comune da entrambi.

Quest'altra risposta mostra come arrestare come se si toccasse le opzioni di menu. Tuttavia, tieni presente che le app possono annullare questo arresto


2
Forse un po 'estraneo alla domanda e questa risposta, ma per quello che vale questo si rivela utile anche per me, per bloccare il mio Mac dal Terminal, un po' come colpire Winkey + L in Windows: /System/Library/CoreServices/Menu\ Extras/User.menu/Contents/Resources/CGSession -suspend. L'ho aliasato in un file che proviene dal mio .bash_profile come segue:alias lock='/System/Library/CoreServices/Menu\ Extras/User.menu/Contents/Resources/CGSession -suspend'
rubynorails

Davvero "dice a tutte le app di chiudere i file ecc."? Pensavo che avesse appena ucciso tutto? La pagina man è del 1998 BSD - Apple ha aggiornato il comando per parlare bene con il software macOS? Utile se le cose si sono bloccate, ma se il sistema funziona bene, sembra che dire al processo di loginwindow di compiere l'azione sarebbe più "educato".
j-beda,

@ j-beda Vedi il documento Apple developer.apple.com/legacy/library/documentation/Darwin/… - Invia innanzitutto un SIGTERM con cui le app dovrebbero occuparsi prima di ricevere un SIGKILL. Vedi l'altra risposta per farlo tramite la finestra di accesso / GUI In realtà come farebbe la finestra di accesso a fare l'atto?
user151019

Sono abbastanza sicuro che lo "spegnimento" di Unix non faccia tutto ciò che il normale processo di spegnimento della GUI per Mac fa, quindi, nella misura in cui Apple non lo utilizza direttamente nel proprio software ma almeno fa alcune cose prima di invocare esso, c'è qualche svantaggio di invocarlo direttamente. Credo che l'app "loginwindow" sia disponibile anche quando non si trova nella finestra di login della GUI e può essere invocata tramite lo strumento "osascript" della riga di comando. Tuttavia, non è infallibile, quindi potrebbe essere necessario invocare lo "spegnimento" (o inviare singole uccisioni a processi specifici, suppongo).
j-beda,

Il meccanismo del segnale non inserisce un messaggio nella coda dei messaggi delle app come una normale chiusura, ma le app dovrebbero comunque gestirlo. cioè se non funziona correttamente è colpa delle app. per qualche tentativo alla GUI vedi l'altra risposta. Ma trovo che spesso c'è un'app che rifiuta di morire e annulla il processo di chiusura, quindi l'arresto è l'unico modo
guranetted

94

Chiudi senza mostrare una finestra di conferma:

osascript -e 'tell app "System Events" to shut down'

Chiudi dopo aver mostrato una finestra di conferma:

osascript -e 'tell app "loginwindow" to «event aevtrsdn»'

Riavvia senza mostrare una finestra di conferma:

osascript -e 'tell app "System Events" to restart'

Riavvia dopo aver mostrato una finestra di conferma:

osascript -e 'tell app "loginwindow" to «event aevtrrst»'

Esci senza mostrare una finestra di conferma:

osascript -e 'tell app "System Events" to  «event aevtrlgo»'

Esci dopo aver mostrato una finestra di conferma:

osascript -e 'tell app "System Events" to log out'

Vai a dormire ( pmset):

pmset sleepnow

Vai a dormire (AppleScript):

osascript -e 'tell app "System Events" to sleep'

Metti in pausa i display (10.9 e successivi):

pmset displaysleepnow

I codici a quattro lettere per gli eventi Apple sono elencati in AERegistry.h.

Tutti i comandi Eventi di sistema sopra riportati inviano eventi Apple al loginwindowprocesso. loginwindowviene inviato gli stessi eventi Apple di cui sopra quando ci si disconnette, si riavvia, si spegne o si mette il Mac in modalità di sospensione normale. Vedere Domande e risposte tecniche QA1134: causa di riavvio, arresto e / o disconnessione a livello di programmazione .

Secondo man shutdown, shutdown -h nowe shutdown -r nowinvia i processi un TERMsegnale seguito da un KILLsegnale.

Secondo la Guida alla programmazione di demoni e servizi , quando si dice loginwindowdi disconnettersi, i processi che supportano la chiusura improvvisa vengono inviati un KILLsegnale e i processi che non supportano la chiusura improvvisa vengono terminati in diversi modi: le applicazioni Cocoa ricevono il applicationShouldTerminate:metodo delegato, le applicazioni in primo piano riceve l' kAEQuitApplicationevento Apple, le applicazioni in background ricevono l' kAEQuitApplicationevento Apple seguito da un KILLsegnale e i demoni ricevono un TERMsegnale seguito da un KILLsegnale dopo alcuni secondi.


-4

Spegnimento immediato:

**sudo shutdown -h now**

Se si desidera ritardare l'arresto, è possibile utilizzare invece la sintassi del comando seguente:

**sudo shutdown -h +30**

(-h parametro imposta il tempo di spegnimento, dove (+) 30 minuti per arrestare il sistema)


2
Le informazioni presentate nella tua risposta sono già incluse nella risposta accettata e come tale non è necessario ripetere ciò che è già stato citato e accettato.
user3439894

-11

utile anche per disconnettersi dal prompt della riga di comando del terminale, digitare 'exit':

[host:~user]$ exit

10
In che modo questo spegne, riavvia o mette in pausa il Mac?
bmike

In entrambi i casi, preferisco Ctrl-Ddisconnettermi, poiché non sporca la cronologia della riga di comando.
mwfearnley,
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.