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

31

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

prateeak ojha
источник
что именно не сработало?
холме
при запуске команды 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

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

bmike
источник
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»'

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

Nohillside
источник
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
tovare
источник
1
Не нужно входить в корневую оболочку - просто
вставьте
1

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

logout UserName

Вот как:

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

    nano ~/.bash_profile

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

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

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

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

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

Kappe
источник
Я должен был разбить тело на новую строку и затем поставить закрывающую фигурную скобку.
Bmauter
@bmauter не для меня, в предложенном виде отлично работает.
Kappe
-3

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

[host:~user]$ exit
Гольбейн
источник