Спосіб виходу користувача з командного рядка в OS X 10.9


31

Я хочу вийти з Mac OS X з командного рядка. Моя версія OS X - 10.9. Я спробував командувати pkill -KILL -u uid, але ця команда не вийшла. Чи є команда, яку можна використовувати для виходу користувача з системи лише за допомогою командного рядка, а не AppleScript ?


що саме не вийшло?
nohillside

запустивши команду pkill -KILL -u uid система показує мені сірий екран, і при довгому очікуванні система показує вікно виходу з сили без запуску програми
prateeak ojha

Відповіді:


32

sudo launchctl bootout gui/$(id -u <username>)
або
sudo launchctl bootout user/$(id -u <username>)

Замініть ім'я користувача на ім’я користувача цільового користувача або замініть всю підзарядку на uid користувача. Це повідомляє startctl про припинення сеансу входу користувачів (gui спеціально посилається на сеанс тимчасового входу користувача, користувач визначає фонові процеси користувачів).

Ви можете вийти з системи без sudoперевірки цього.

Зауважте, що це ТОЛЬКО працюватиме на macOS 10.11.x або новіші (див. launchctl helpДокладніше)


1
Я ПРОСТО перечитав ваше запитання, і мені дуже шкода, що це не допоможе вам, але воно з’явиться в результатах пошуку Google.
Ієн Хендерсон

29

Щоб вийти з терміналу (або віддаленого сеансу ssh), просто введіть процес вікна входу:

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 'скажіть програмі "Системні події" до "події aevtrlgo"', показуючи помилку: "<" не можна перейти після цього до.
prateeak ojha

Хм, працює добре для мене. Чи можете ви спробувати зі скрипту оболонки замість командного рядка, можливо, оболонка робить тут якісь дивні речі.
nohillside

Я здогадуюсь, що у ОП є якась інша проблема, і звичайні команди зависають від коментарів тут і опису питання.
bmike

5
Зауважимо, що «≠ <<
mlainz

2

Якщо у вас кілька користувачів ...

Знайдіть ідентифікатор процесу за допомогою:

ps aux|grep login

Потім вбити цей процес, і ви вийшли з сеансу. Але залишилось багато закупок.

Перевірте, pstreeщоб ви знали, який процес закінчити.


2

Це робить для мене трюк.

sudo -s

Щоб отримати декілька кореневих привілеїв та підказки #, тоді вбийте процеси.

killall -vu username -HUP

І якщо це не все пішло Nuke em! Обов’язкове попередження - вбивство речей як root не скасовує, і ні, "чи ви впевнені, що хочете перервати цей процес без збереження файлів, включаючи системні критичні бази даних, які можуть зрідка перезавантажити машину". тип попереджень.

killall -vu username -9

1
Не потрібно входити в кореневу оболонку - просто дотримуйтесь
судо

1

Приємною утилітою, яку потрібно додати до свого терміналу, є команда "вихід", яка використовується таким чином:

logout UserName

Ось як:

  1. Відредагуйте .bash_profile

    nano ~/.bash_profile

  2. Додати цей рядок:

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

  3. Збережіть файл, натиснувши ctrl+x

  4. Перезапустіть термінал

Ви готові йти;)


Мені довелося розбити тіло на новій лінії і після цього також поставити закриваючу фігурну дужку.
bmauter

@bmauter не для мене, у запропонованій формі працює чудово.
Каппе

-3

якщо ви ввійшли за допомогою ssh на віддалений комп'ютер, ви можете увійти, просто ввівши "exit":

[host:~user]$ exit
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.