我对使用终端作为在Mac上解决解决方案的另一种方式越来越感兴趣。我已经看到了这个标题为“关闭/重新启动OSX的更好方法吗?”的问题。。
因此,我想知道:
如何仅使用Terminal命令关闭,重新启动和睡眠我的Mac?
我对使用终端作为在Mac上解决解决方案的另一种方式越来越感兴趣。我已经看到了这个标题为“关闭/重新启动OSX的更好方法吗?”的问题。。
因此,我想知道:
如何仅使用Terminal命令关闭,重新启动和睡眠我的Mac?
Answers:
您需要执行的命令是shutdown。这会通知所有用户计算机将要关闭,并告诉所有应用关闭文件等。
该命令使用参数-h,-r或-s关闭,重新启动Mac或使其处于睡眠状态。
该命令必须以root用户身份运行,因此您需要使用sudo。
例如立即重启机器
sudo shutdown -r now
例如在60分钟内关闭机器
sudo shutdown -h +60
从评论中有两件事要解决
关机的工作方式是向所有进程发送一个sigterm,然后处理该事件,例如保存打开的文件等。如果它们没有退出,则将发送给他们一个SIGKILL,迫使它们死去而没有任何机会做出响应。信号不会通过普通的按键消息队列发送,因此Apps必须分别处理从菜单上的quit调用的代码。一个好的应用程序应从两者调用通用代码。
这个其他答案显示了如何关闭,就像单击菜单选项一样。但是请注意,应用可以取消关闭
/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
当您注销,重新启动,关闭计算机或让Mac正常进入睡眠状态时,会收到与上述相同的Apple事件。请参阅技术问答QA1134:以编程方式导致重新启动,关闭和/或注销。
据man shutdown
,shutdown -h now
并shutdown -r now
发送处理一个TERM
接着一个信号KILL
的信号。
根据《守护程序和服务编程指南》,当您告诉loginwindow
注销时,将向支持突然终止的进程发送KILL
信号,并且不支持突然终止的进程将以不同的方式终止:可可应用程序接收applicationShouldTerminate:
委托方法,前台应用程序接收到kAEQuitApplication
Apple事件,后台应用程序接收到kAEQuitApplication
Apple事件,后跟一个KILL
信号,守护程序接收一个TERM
信号,并KILL
在几秒钟后接收到一个信号。
立即关机:
**sudo shutdown -h now**
如果您确实想延迟关机,则可以改用以下命令语法:
**sudo shutdown -h +30**
(-h参数设置关闭时间,其中(+)30分钟可停止系统)
从终端命令行提示符注销,也很有用,键入“ exit”:
[host:~user]$ exit
Ctrl-D
注销,因为它不会乱扔命令行历史记录。