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


Answers:


22

以下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'"

说得好。准确回答问题的一种增强方法是在applescript中包含“ sleep”语法。另外,我知道第二行代码是从终端粘贴的,但是因此不必要地转义了围绕系统事件的双引号。
Sacrilicious

@关于睡眠命令的好点。由于alias maclogout="..."
dbr

2
我最近发现在终端中运行命令不会关闭/关闭系统,因为终端本身会阻止由于bash不是当前进程而导致注销。这可以很容易地通过'(sleep 1; command)&'来解决,其中sleep在后台将作业排队,并且当它执行终端时,它并不认为它很忙。
Grzegorz Adam Hankiewicz,2011年

17

在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"

你不能只用sudo killall loginwindow吗?至少在10.7上,loginwindow似乎立即再次打开了该过程。
Lri 2012年

3

我知道这是一个老问题,但这对我有所帮助,在OS X 10.8上需要的命令是:

ps -Ajc | grep loginwindow | awk '{print $2}' | sudo xargs kill -9

awk语句是不同的,并kill -9确保显示登录提示。


@gronostaj您真的相信这样的编辑会被接受吗?我看到像这样的建议编辑一直被拒绝为“无效的编辑(尝试对现有帖子进行回复或发表评论)”或“彻底改变”,而markl显然尚无足够的代表来发表评论。
斯科特,

@斯科特,您是对的,我发布评论太快了。
gronostaj

2

我想我已经找到了答案,如何摆好的Mac OS X注销,而不2分钟的等待。

我发现按住Shift,Option和Command并按“ q”将正常注销,而不询问“是否要注销”。

因此,我通过Automator将AppleScript编码为:

tell application "System Events"
     keystroke "q" using {command down, shift down, option down}
end tell

0

如果您以与登录Mac的gui相同的用户身份登录到Shell,则可以发出sudo-less命令:launchctl reboot logout这样做确实注销了用户;它有一个警告,就是不允许退出时提示交互的应用程序退出,但是这似乎并不意味着这与彻底杀死它们一样kill(SIG TERM)或kill -9(SIG KILL)。


0

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


至少在El Capitan下,正确的命令是数字用户ID(UID)sudo launchctl bootout gui/XXX在哪里XXX。请注意,i)bootout子命令排在最前面,ii)$(id)返回的内容比UID多得多。
Laryx Decidua

已更新为正确呼叫ID(id -u)
Iain Henderson

0

注销命令是添加到终端的一个不错的实用程序,其用法如下:

logout UserName

这里是如何:

  1. 编辑您的.bash_profile

    nano ~/.bash_profile

  2. 添加此行:

    logout() {sudo launchctl bootout user/$(id -u "$1")}

  3. 按保存文件 ctrl+x

  4. 重启终端

您准备好了;)

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.