使用终端命令关闭,重新启动和使Mac休眠?


Answers:


147

您需要执行的命令是shutdown。这会通知所有用户计算机将要关闭,并告诉所有应用关闭文件等。

该命令使用参数-h,-r或-s关闭,重新启动Mac或使其处于睡眠状态。

该命令必须以root用户身份运行,因此您需要使用sudo。

例如立即重启机器

sudo shutdown -r now

例如在60分钟内关闭机器

sudo shutdown -h +60

从评论中有两件事要解决

关机的工作方式是向所有进程发送一个sigterm,然后处理该事件,例如保存打开的文件等。如果它们没有退出,则将发送给他们一个SIGKILL,迫使它们死去而没有任何机会做出响应。信号不会通过普通的按键消息队列发送,因此Apps必须分别处理从菜单上的quit调用的代码。一个好的应用程序应从两者调用通用代码。

这个其他答案显示了如何关闭,就像单击菜单选项一样。但是请注意,应用可以取消关闭


2
也许与问题和答案无关,但是对于我来说,从终端锁定Mac也很方便,就像在Windows中按Winkey + L一样/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'
rubynorails

是否真的“告诉所有应用程序关闭文件等”?我以为它杀死了一切?手册页来自1998年的BSD-Apple是否已更新命令以与macOS软件保持友好联系?如果事情挂了,这很有用,但是如果系统运行良好,似乎告诉loginwindow进程执行任务将更加“礼貌”。
j-beda

@ j-beda请参阅Apple文档developer.apple.com/legacy/library/documentation/Darwin / ...- 它首先发送SIGTERM,应用在收到SIGKILL之前应处理。通过登录窗口/ GUI查看执行此操作的其他答案实际上,loginwindow会如何处理?
user151019

我非常确定Unix的“关闭”功能不会像普通的Mac GUI关闭程序那样完成所有工作,因此,在某种程度上,Apple不会直接在自己的软件中使用它,但是至少在调用之前会做一些工作它,直接调用它有一些缺点。我相信即使没有在GUI登录窗口中,“ loginwindow”应用程序仍然可用,并且可以通过命令行“ osascript”工具进行调用。但是,它并不是万无一失的,因此无论如何都可能需要调用“关机”(或将个别的杀戮发送给我想的特定进程)。
j-beda '18年

信号机制不会像正常关闭那样在Apps消息队列上放置消息,但应用程序仍应处理该消息。即,如果它不能正常工作,那是应用程序的错误。对于GUI的一些尝试,请参见其他答案。但是我发现,通常有一个应用程序会拒绝死亡并取消退出过程,因此关机是唯一可行的方法
user151019

94

关闭但不显示确认对话框:

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当您注销,重新启动,关闭计算机或让Mac正常进入睡眠状态时,会收到与上述相同的Apple事件。请参阅技术问答QA1134:以编程方式导致重新启动,关闭和/或注销

man shutdownshutdown -h nowshutdown -r now发送处理一个TERM接着一个信号KILL的信号。

根据《守护程序和服务编程指南》,当您告诉loginwindow注销时,将向支持突然终止的进程发送KILL信号,并且不支持突然终止的进程将以不同的方式终止:可可应用程序接收applicationShouldTerminate:委托方法,前台应用程序接收到kAEQuitApplicationApple事件,后台应用程序接收到kAEQuitApplicationApple事件,后跟一个KILL信号,守护程序接收一个TERM信号,并KILL在几秒钟后接收到一个信号。


-4

立即关机:

**sudo shutdown -h now**

如果您确实想延迟关机,则可以改用以下命令语法:

**sudo shutdown -h +30**

(-h参数设置关闭时间,其中(+)30分钟可停止系统)


2
您的答案中显示的信息已包含在接受的答案中,因此,无需重复已提及和接受的内容。
user3439894

-11

从终端命令行提示符注销,也很有用,键入“ exit”:

[host:~user]$ exit

10
它将以何种方式关闭,重新启动Mac或使其进入睡眠状态?
bmike

无论哪种方式,我都喜欢Ctrl-D注销,因为它不会乱扔命令行历史记录。
mwfearnley
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.