Mac OS X 终端注销当前用户的命令是什么?

Mac OS X 终端注销当前用户的命令是什么?

我想运行类似“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进程。它将粗暴地终止以您的用户名运行的所有进程(程序)。

此过程分为两步。

  1. 在终端中运行以下命令:

    ps -Ajc | grep loginwindow
    
  2. 然后,运行

    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,这将立即将您注销并使系统显示登录窗口(略有延迟)。

相关内容