Способ выхода пользователя из командной строки в OS X 10.9


31

Я хочу выйти из Mac OS X из командной строки. Моя версия OS X 10.9. Я попробовал команду pkill -KILL -u uid, но эта команда не сработала. Есть ли команда, которая может использоваться для выхода пользователя из системы с помощью только командной строки, а не AppleScript ?


что именно не сработало?
холме

при запуске команды pkill -KILL -u uid система показывает мне серый экран, и при долгом ожидании система показывает окно принудительного выхода без запуска приложения
prateeak ojha

Ответы:


32

sudo launchctl bootout gui/$(id -u <username>)
или
sudo launchctl bootout user/$(id -u <username>)

Замените username на имя пользователя целевого пользователя или замените всю подоболочку на uid пользователя. Это говорит launchctl прекратить сеанс входа пользователя в систему (gui определенно относится к сеансу временного входа пользователя в систему, пользователь определяет фоновые процессы пользователей).

Вы можете выйти из системы без, sudoчтобы проверить это.

Обратите внимание, что это будет работать ТОЛЬКО на macOS 10.11.x или новее (подробнее см. launchctl help)


1
Я просто перечитал ваш вопрос, и мне жаль, что это вам не поможет, но оно появится в результатах поиска Google.
Иэн Хендерсон

29

Чтобы выйти из терминала (или удаленного ssh-сеанса), просто убейте процесс loginwindow:

sudo pkill loginwindow

Вы можете получить фантазию и указать пользователя, если у нескольких пользователей есть процесс входа в систему, но это простой способ, без быстрого завершения пользовательского графического сеанса.


16

Это работало для меня в прошлом:

Выйти (с подтверждением)

osascript -e 'tell app "System Events" to log out'

Выйти напрямую (без подтверждения)

osascript -e 'tell app "System Events" to  «event aevtrlgo»'

или

osascript -e 'tell application "loginwindow" to  «event aevtrlgo»'

Таким образом, любое работающее приложение будет замечено и может безопасно завершить работу.


osascript -e 'сообщает приложению «Системные события» «event aevtrlgo» », показывая ошибку:« <»не может перейти после этого.
prateeak ojha

Хм, хорошо работает для меня. Можете ли вы попробовать сценарий оболочки вместо командной строки, может быть, оболочка делает некоторые странные вещи здесь.
nohillside

Я предполагаю, что у ОП есть какая-то другая проблема, и обычные команды зацикливаются на комментариях здесь и описании вопроса.
bmike

5
Обратите внимание, что «≠ <<
mlainz

2

Если у вас есть несколько пользователей ....

Найдите идентификатор процесса с помощью:

ps aux|grep login

Затем убейте этот процесс, и вы выйдете из этого сеанса. Но впереди еще много процессов.

Проверьте, pstreeчтобы вы знали, какой процесс завершить.


2

Это делает трюк для меня.

sudo -s

Чтобы получить некоторые привилегии root и приглашение #, затем убейте процессы.

killall -vu username -HUP

И если это еще не все прошло. Nuke Em! Обязательное предупреждение - уничтожение файлов с правами root не отменяет и не вызывает «вы уверены, что хотите прервать этот процесс без сохранения ваших файлов, в том числе критических системных баз данных, которые в редких случаях могут привести к невозможности загрузки компьютера». Напечатайте предупреждения.

killall -vu username -9

1
Не нужно входить в корневую оболочку - просто
вставьте

1

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

logout UserName

Вот как:

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

    nano ~/.bash_profile

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

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

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

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

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


Я должен был разбить тело на новую строку и затем поставить закрывающую фигурную скобку.
Bmauter

@bmauter не для меня, в предложенном виде отлично работает.
Kappe

-3

если вы вошли с помощью ssh на удаленный компьютер, вы можете выйти из системы, просто набрав «exit»:

[host:~user]$ exit
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.