Меня все больше интересует использование терминала в качестве альтернативного способа решения задач на моем Mac. Я видел этот вопрос под названием «Есть ли лучший способ выключить/перезапустить OSX?» .
Поэтому я хотел бы знать:
Как выключить, перезагрузить и перевести мой Mac в спящий режим исключительно с помощью команды терминала?
Команда, которая вам нужна, это shutdown . Это информирует всех пользователей о том, что машина будет выключена, и сообщает всем приложениям закрыть файлы и т. д.
Команда принимает параметр -h
или -r
для -s
выключения, перезагрузки или сна Mac.
Команду нужно запускать от имени пользователя root, поэтому вам нужно использовать sudo
.
например, немедленно перезагрузить машину
sudo shutdown -r now
например, чтобы выключить машину через 60 минут
sudo shutdown -h +60
Из комментариев есть две вещи, которые нужно решить
Выключение работает путем отправки sigterm всем процессам, которые затем должны обрабатывать это, например, сохранять открытые файлы и т. Д. Если они не завершатся, им будет отправлен SIGKILL, который заставит их умереть без возможности ответить. Сигналы не отправляются через обычную очередь сообщений клавиш, поэтому приложения должны обрабатывать это отдельно от кода, который вызывается из меню выхода. Хорошее приложение должно вызывать общий код из обоих.
Этот другой ответ показывает, как завершить работу, как если бы вы нажали параметры меню. Но обратите внимание, что приложения могут отменить это отключение.
/System/Library/CoreServices/Menu\ Extras/User.menu/Contents/Resources/CGSession -suspend
. У меня есть псевдоним в файле, который находится в моем .bash_profile следующим образом:alias lock='/System/Library/CoreServices/Menu\ Extras/User.menu/Contents/Resources/CGSession -suspend'
Завершение работы без отображения диалогового окна подтверждения:
osascript -e 'tell app "System Events" to shut down'
Завершение работы после отображения диалогового окна подтверждения:
osascript -e 'tell app "loginwindow" to «event aevtrsdn»'
Перезапустите без отображения диалогового окна подтверждения:
osascript -e 'tell app "System Events" to restart'
Перезапустите после отображения диалогового окна подтверждения:
osascript -e 'tell app "loginwindow" to «event aevtrrst»'
Выйдите из системы без отображения диалогового окна подтверждения:
osascript -e 'tell app "System Events" to «event aevtrlgo»'
Выйдите из системы после отображения диалогового окна подтверждения:
osascript -e 'tell app "System Events" to log out'
Иди спать ( pmset
):
pmset sleepnow
Иди спать (AppleScript):
osascript -e 'tell app "System Events" to sleep'
Перевод дисплеев в спящий режим (10.9 и более поздние версии):
pmset displaysleepnow
Четырехбуквенные коды событий Apple перечислены в AERegistry.h
.
Все приведенные выше команды системных событий отправляют события Apple в loginwindow
процесс. loginwindow
отправляются те же события Apple, что и выше, когда вы выходите из системы, перезагружаетесь, выключается или переводите Mac в обычный режим сна. См. технические вопросы и ответы QA1134: Программно вызывающий перезапуск, завершение работы и/или выход из системы .
Согласно man shutdown
, shutdown -h now
и shutdown -r now
send обрабатывает TERM
сигнал, за которым следует KILL
сигнал.
Согласно Руководству по программированию демонов и служб , когда вы говорите loginwindow
выйти из системы, процессам, которые поддерживают внезапное завершение, отправляется KILL
сигнал, а процессы, которые не поддерживают внезапное завершение, завершаются по-разному: приложения Cocoa получают applicationShouldTerminate:
метод делегата, приложения переднего плана получают kAEQuitApplication
событие Apple, фоновые приложения получают kAEQuitApplication
событие Apple, за которым следует KILL
сигнал, а демоны получают TERM
сигнал, за которым следует KILL
сигнал через несколько секунд.
sleep 60 && osascript -e 'tell app "System Events" to shut down'
, это может сработать, но как это сделать только с помощью applescript?Выключите немедленно:
sudo shutdown -h now
Если вы хотите отложить завершение работы, вместо этого вы можете использовать следующий синтаксис команды:
sudo shutdown -h +30
(параметр -h задает время до завершения работы, где (+)30 минут для остановки системы)
также полезно, чтобы выйти из командной строки терминала, введите «выход»:
[host:~user]$ exit
атилкан