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