Menggunakan Perintah Terminal untuk Shutdown, Restart, dan Sleep My Mac?

120

Saya semakin tertarik menggunakan Terminal sebagai cara alternatif untuk mengatasi solusi pada Mac saya. Saya telah melihat pertanyaan ini berjudul "Apakah ada cara yang lebih baik untuk mematikan / memulai kembali OSX?" .

Karena itu saya ingin tahu:

Bagaimana cara mematikan, menyalakan kembali dan tidur Mac saya menggunakan perintah Terminal secara eksklusif?

Simon
sumber
reboot untuk restart juga berfungsi.
atilkan

Jawaban:

147

Perintah yang Anda cari adalah shutdown . Ini memberi tahu semua pengguna bahwa mesin akan dimatikan dan memberi tahu semua aplikasi untuk menutup file, dll.

Perintah ini mengambil parameter -h, -r atau -s untuk mematikan, memulai kembali atau tidur Mac.

Perintah harus dijalankan sebagai root sehingga Anda perlu menggunakan sudo.

misalnya untuk me-reboot mesin segera

sudo shutdown -r now

mis. untuk mematikan mesin dalam 60 menit

sudo shutdown -h +60

Dari komentar ada dua hal yang harus dibenahi

Cara shutdown bekerja adalah dengan mengirimkan sigterm ke semua proses yang kemudian harus mengatasinya misalnya menyimpan file yang terbuka dll. Jika mereka tidak keluar maka mereka akan dikirimi SIGKILL yang memaksa mereka mati tanpa ada kesempatan untuk merespons. Sinyal tidak dikirim melalui antrian pesan kunci normal sehingga Aplikasi harus menangani ini secara terpisah dengan kode yang dipanggil dari berhenti di menu. Aplikasi yang baik harus memanggil kode umum dari keduanya.

Jawaban lain ini menunjukkan cara mematikan seperti jika Anda menekan opsi menu. Tetapi perhatikan bahwa aplikasi dapat membatalkan penutupan ini

pengguna151019
sumber
2
Mungkin sedikit tidak terkait dengan pertanyaan dan jawaban ini, tapi untuk apa itu layak ini juga sangat berguna bagi saya untuk mengunci Mac saya dari Terminal, jenis seperti memukul Winkey + L pada Windows: /System/Library/CoreServices/Menu\ Extras/User.menu/Contents/Resources/CGSession -suspend. Saya memilikinya alias dalam file yang bersumber di .bash_profile saya sebagai berikut:alias lock='/System/Library/CoreServices/Menu\ Extras/User.menu/Contents/Resources/CGSession -suspend'
rubynorails
Apakah ini benar-benar "memberi tahu semua aplikasi untuk menutup file, dll."? Saya pikir itu baru saja membunuh segalanya? Halaman manualnya berasal dari tahun 1998 BSD - sudahkah Apple memperbarui perintah untuk berbicara baik dengan perangkat lunak macOS? Berguna jika ada yang macet, tetapi jika sistem bekerja dengan baik, sepertinya memberitahu proses loginwindow untuk melakukan perbuatan akan lebih "sopan".
j-beda
@ j-beda Lihat Apple doc developer.apple.com/legacy/library/documentation/Darwin/… - Pertama-tama mengirimkan SIGTERM yang harus ditangani oleh aplikasi sebelum mereka menerima SIGKILL. Lihat jawaban lain untuk melakukannya melalui Window login / GUI. Sebenarnya bagaimana loginwindow melakukan perbuatan itu?
user151019
Saya cukup yakin bahwa "shutdown" Unix tidak melakukan semua hal yang proses shutdown Mac GUI biasa, dengan demikian, sejauh Apple tidak menggunakannya dalam perangkat lunak mereka sendiri secara langsung tetapi setidaknya melakukan beberapa hal sebelum memanggil itu, ada beberapa kelemahan untuk memohonnya secara langsung. Saya percaya bahwa aplikasi "loginwindow" tersedia bahkan ketika tidak di jendela login GUI, dan dapat dipanggil melalui alat baris perintah "osascript". Namun itu tidak sempurna, jadi orang mungkin perlu memanggil "shutdown" (atau mengirim pembunuhan individu ke proses tertentu yang saya kira).
j-beda
Mekanisme sinyal tidak menempatkan pesan pada antrian pesan Aplikasi seperti penutupan normal tetapi aplikasi masih harus menghadapinya. yaitu jika tidak berfungsi dengan baik itu adalah kesalahan Aplikasi. untuk beberapa upaya di GUI lihat jawaban lainnya. Tapi saya menemukan bahwa sering ada aplikasi yang menolak untuk mati dan membatalkan proses berhenti sehingga shutdown adalah satu-satunya cara
guranetted
94

Matikan tanpa menampilkan dialog konfirmasi:

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

Matikan setelah menampilkan dialog konfirmasi:

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

Mulai ulang tanpa menampilkan dialog konfirmasi:

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

Mulai ulang setelah menampilkan dialog konfirmasi:

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

Logout tanpa menunjukkan dialog konfirmasi:

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

Logout setelah menunjukkan dialog konfirmasi:

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

Tidur ( pmset):

pmset sleepnow

Pergi tidur (AppleScript):

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

Pasang monitor ke mode sleep (10.9 dan yang lebih baru):

pmset displaysleepnow

Empat kode huruf untuk acara Apple tercantum dalam AERegistry.h.

Semua perintah System Events di atas mengirim Apple events ke loginwindowproses. loginwindowdikirim kejadian Apple yang sama seperti di atas ketika Anda logout, restart, mematikan, atau membuat Mac tidur normal. Lihat T&J Teknis QA1134: Secara terprogram menyebabkan restart, shutdown, dan / atau logout .

Menurut man shutdown, shutdown -h nowdan shutdown -r nowmengirim proses TERMsinyal diikuti oleh KILLsinyal.

Menurut Panduan Pemrograman Layanan dan Daemon , ketika Anda meminta loginwindowuntuk keluar, proses yang mendukung penghentian mendadak dikirim KILLsinyal, dan proses yang tidak mendukung penghentian mendadak diakhiri dengan cara yang berbeda: Aplikasi Kakao menerima applicationShouldTerminate:metode delegasi, aplikasi latar depan menerima kAEQuitApplicationacara Apple, aplikasi latar belakang menerima kAEQuitApplicationacara Apple diikuti oleh KILLsinyal, dan daemon menerima TERMsinyal diikuti oleh KILLsinyal setelah beberapa detik.

Lri
sumber
-4

Shutdown segera:

**sudo shutdown -h now**

Jika Anda merasa ingin menunda, Anda dapat menggunakan sintaks perintah berikut:

**sudo shutdown -h +30**

(-h parameter mengatur waktu untuk mematikan, di mana (+) 30 menit untuk menghentikan sistem)

CamelTM
sumber
2
Informasi yang disajikan dalam jawaban Anda sudah termasuk dalam jawaban yang diterima, dan karenanya tidak perlu mengulangi apa yang sudah disebutkan dan diterima.
user3439894
-11

juga berguna, untuk keluar dari prompt baris perintah terminal, ketik 'keluar':

[host:~user]$ exit
holbein
sumber
10
Dengan cara apa ini dimatikan, restart atau tidur Mac?
bmike
Either way, saya lebih suka Ctrl-Duntuk logout, karena tidak mengotori sejarah baris perintah.
mwfearnley