我想运行类似“sleep 3600; logout”的命令,但 logout bash 命令只会关闭当前终端。如何关闭整个 Mac OS X 会话?
答案1
以下 Applescript 将注销当前用户:
tell application "System Events" to log out
您可以使用以下命令将其包装在 bash 别名中osascript
:
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'"
答案2
在 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"
答案3
我知道这是一个老问题,但它对我有帮助,我在 OS X 10.8 上需要的命令是:
ps -Ajc | grep loginwindow | awk '{print $2}' | sudo xargs kill -9
该awk
语句不同,并kill -9
确保显示登录提示。
答案4
我认为 OS X 10.9 之后的“最佳”方式可能是launchctl gui/$(id -u <username>) bootout
通过运行 可以找到 OS X 10.9 之后的 launchctl 文档launchctl help
,但本质上上述命令将关闭用户的临时会话。替代方法是launchctl user/$(id -u <username>) bootout
关闭在用户未登录时运行用户守护程序的永久会话。
可以通过运行来测试launchctl gui/$(id -u) bootout
,这将立即将您注销并使系统显示登录窗口(略有延迟)。