Я хотел бы запустить что-то вроде «sleep 3600; logout», но команда logout bash только закрывает текущий терминал. Как закрыть полный сеанс Mac OS X?
7 ответов
Следующий 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'"
Не существует "хорошего" способа выхода текущего пользователя из терминала в 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"
Я знаю, что это старый вопрос, но он помог мне, команда, которая мне была нужна в OS X 10.8:
ps -Ajc | grep loginwindow | awk '{print $2}' | sudo xargs kill -9
Оператор awk
отличается, и kill -9
обеспечивает отображение приглашения на вход в систему.
Я думаю, что нашел ответ на то, как изящно выйти из 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
Я бы сказал, что "самым приятным" способом после 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
, это немедленно выведет вас из системы и заставит систему отобразить окно входа в систему (с некоторой задержкой).
Если вы вошли в оболочку как тот же пользователь, который вошел в графический интерфейс Mac, вы можете выполнить команду sudo-less: launchctl reboot logout
которая довольно эффективно выполняет выход пользователя из системы; у него есть предостережение о том, что приложения, которые закрываются, не запрашивают взаимодействие во время выхода, однако это не означает, что это то же самое, что убить их напрямую, как kill
(SIG TERM) или kill -9
(SIG KILL) ) может быть.
Хорошей утилитой для добавления в ваш терминал является команда выхода из системы , которая будет использоваться следующим образом:
logout UserName
Вот как:
Отредактируйте ваш .bash_profile
nano ~/.bash_profile
Добавьте эту строку:
logout() {sudo launchctl bootout user/$(id -u "$1")}
Сохраните файл, нажав
ctrl+x
Перезагрузите терминал
Вы готовы к работе;)