Завершите работу, не показывая диалоговое окно подтверждения:
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, что и выше, когда вы выходите из системы, перезагружаетесь, выключаетесь или переводите компьютер в нормальный режим сна. См. Технические вопросы и ответы QA1134: программно вызывает перезапуск, отключение и / или выход из системы .
Согласно man shutdown
, shutdown -h now
и shutdown -r now
отправка обрабатывает TERM
сигнал, за которым следует KILL
сигнал.
Согласно Руководству по программированию Daemons and Services , когда вы говорите loginwindow
выйти из системы, процессам, которые поддерживают внезапное завершение, отправляется KILL
сигнал, а процессы, которые не поддерживают внезапное завершение, завершаются различными способами: приложения какао получают applicationShouldTerminate:
метод делегата, приложения переднего плана получают kAEQuitApplication
событие Apple, фоновые приложения получают kAEQuitApplication
событие Apple, за которым следует KILL
сигнал, а демоны получают TERM
сигнал, за которым следует KILL
сигнал через несколько секунд.