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

Grz*_*icz 21 mac command-line macos

我想运行类似“sleep 3600; logout”的东西,但 logout bash 命令只关闭当前终端。如何关闭完整的 Mac OS X 会话?

dbr*_*dbr 22

以下 Applescript 将注销当前用户:

tell application "System Events" to log out
Run Code Online (Sandbox Code Playgroud)

您可以使用以下osascript命令将其包装在 bash 别名中:

alias maclogout="osascript -e 'tell application \"System Events\" to log out'"
Run Code Online (Sandbox Code Playgroud)

与点击“?>注销[用户名]...”相同,等待2分钟后注销

这很容易与sleep命令结合使用:

alias delayedlogout="sleep 3600; maclogout"
Run Code Online (Sandbox Code Playgroud)

..or 可以组合成一个别名:

alias delayedlogout="sleep 3600; osascript -e 'tell application \"System Events\" to log out'"
Run Code Online (Sandbox Code Playgroud)

  • 我最近发现在终端中运行命令不会关闭/关闭系统,因为终端本身阻止了由于 bash 不是当前进程而导致的注销。这可以通过'(sleep 1; command) &'轻松修复,其中睡眠在后台将作业排队,并且在它执行时终端并不认为它很忙。 (2认同)

Jos*_*unt 19

没有“好的”方法可以将当前用户从 OS X 中的终端注销。这样做的“混乱”方法是终止该用户的loginwindow进程。它会粗暴地杀死以您的用户名运行的所有进程(程序)。

这样做是一个两步过程。

  1. 在终端中,运行这个:

    ps -Ajc | grep loginwindow
    
    Run Code Online (Sandbox Code Playgroud)
  2. 然后,运行

    sudo kill <pid>
    
    Run Code Online (Sandbox Code Playgroud)

    <pid>上面命令的输出中的第一个数字(第二列)在哪里。

使用 sudo kill -9 强制终止我必须执行的进程才能使其正常工作。

例如,如果第一个命令的输出是:

joshhunt    41     1    41 5e15c08    0 Ss     ??    3:13.09 loginwindow
Run Code Online (Sandbox Code Playgroud)

然后我会运行sudo kill 41,输入我的密码,然后我就退出了。

这可以组合成一个 bash 别名:

alias messylogout="ps -Ajc | grep loginwindow | grep -v grep | awk '{print \$2}' | sudo xargs kill"
Run Code Online (Sandbox Code Playgroud)