19

Я хотел бы запустить что-то вроде «sleep 3600; logout», но команда logout bash только закрывает текущий терминал. Как закрыть полный сеанс Mac OS X?

7 ответов7

22

Следующий 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'"
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"
3

Я знаю, что это старый вопрос, но он помог мне, команда, которая мне была нужна в OS X 10.8:

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

Оператор awk отличается, и kill -9 обеспечивает отображение приглашения на вход в систему.

2

Я думаю, что нашел ответ на то, как изящно выйти из Mac OS X без 2-минутного ожидания.

Я понял, что удерживая Shift, Option и Command и нажимая "q", вы выйдете изящно и не спросите "хотите ли вы выйти из системы".

Итак, я написал AppleScript через Automator для:

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

Я бы сказал, что "самым приятным" способом после OS X 10.9 может быть launchctl gui/$(id -u <username>) bootout

Документация post OS X 10.9 для launchctl находится с launchctl help , но, по сути, приведенная выше команда прервет временный сеанс пользователя. Альтернативная launchctl user/$(id -u <username>) bootout разрывает постоянный сеанс, который запускает демоны пользователя, пока пользователь не вошел в систему.

Это можно проверить, запустив launchctl gui/$(id -u) bootout , это немедленно выведет вас из системы и заставит систему отобразить окно входа в систему (с некоторой задержкой).

0

Если вы вошли в оболочку как тот же пользователь, который вошел в графический интерфейс Mac, вы можете выполнить команду sudo-less: launchctl reboot logout которая довольно эффективно выполняет выход пользователя из системы; у него есть предостережение о том, что приложения, которые закрываются, не запрашивают взаимодействие во время выхода, однако это не означает, что это то же самое, что убить их напрямую, как kill (SIG TERM) или kill -9 (SIG KILL) ) может быть.

0

Хорошей утилитой для добавления в ваш терминал является команда выхода из системы , которая будет использоваться следующим образом:

logout UserName

Вот как:

  1. Отредактируйте ваш .bash_profile

    nano ~/.bash_profile

  2. Добавьте эту строку:

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

  3. Сохраните файл, нажав ctrl+x

  4. Перезагрузите терминал

Вы готовы к работе;)

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .