我想运行“ sleep 3600; logout”之类的东西,但是logout bash命令仅关闭当前终端。如何关闭整个Mac OS X会话?
我想运行“ sleep 3600; logout”之类的东西,但是logout bash命令仅关闭当前终端。如何关闭整个Mac OS X会话?
Answers:
以下Applescript将注销当前用户:
tell application "System Events" to log out
您可以使用以下osascript
命令将其包装在bash别名中:
alias maclogout="osascript -e 'tell application \"System Events\" to log out'"
与单击“>注销[用户名] ...”相同,等待2分钟后将注销
这很容易与以下sleep
命令结合使用:
alias delayedlogout="sleep 3600; maclogout"
..或可以合并为一个别名:
alias delayedlogout="sleep 3600; osascript -e 'tell application \"System Events\" to log out'"
alias maclogout="..."
在OS X中没有从终端注销当前用户的“好”方法。“混乱”的方法是杀死该用户的loginwindow
进程。它将无礼地杀死使用您的用户名运行的所有进程(程序)。
这样做是一个两步过程。
在终端中,运行以下命令:
ps -Ajc | grep loginwindow
然后跑
sudo kill <pid>
<pid>
上面命令输出的第一个数字(第二列)在哪里。
使用sudo kill -9强制杀死我必须执行的过程才能使它工作。
因此,例如,如果第一个命令的输出为:
joshhunt 41 1 41 5e15c08 0 Ss ?? 3:13.09 loginwindow
然后,我将运行sudo kill 41
,输入密码,然后注销。
可以将其合并为bash别名:
alias messylogout="ps -Ajc | grep loginwindow | grep -v grep | awk '{print \$2}' | sudo xargs kill"
sudo killall loginwindow
吗?至少在10.7上,loginwindow
似乎立即再次打开了该过程。
我认为OS X 10.9之后的“最”方法可能是 launchctl gui/$(id -u <username>) bootout
可以通过运行来找到launchctl的OS X 10.9后文档launchctl help
,但实际上,以上命令将拆除用户的临时会话。备用方法launchctl user/$(id -u <username>) bootout
取消了在用户未登录时运行用户守护程序的永久会话。
可以通过运行进行测试launchctl gui/$(id -u) bootout
,这将立即使您注销并导致系统显示登录窗口(有些延迟)。
sudo launchctl bootout gui/XXX
在哪里XXX
。请注意,i)bootout
子命令排在最前面,ii)$(id)
返回的内容比UID多得多。