Bir kullanıcıyı OS X 10.9'daki komut satırından kapatmanın yolu


31

Mac OS X'imi komut satırından kapatmak istiyorum. OS X sürümüm 10.9. Komutu denedim pkill -KILL -u uidama bu komut işe yaramadı. Bir kullanıcıyı yalnızca AppleScript değil, komut satırını kullanarak sistemden çıkarmak için kullanılabilecek bir komut var mı ?


tam olarak ne işe yaramadı?
nohillside

pkill komutunu çalıştırırken -KILL -u uid, sistem bana gri bir ekran gösteriyor ve uzun süre bekledikten sonra, sistem çalışan bir uygulama olmadan zorla çıkma penceresini gösteriyor
prateeak ojha

Yanıtlar:


32

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

Kullanıcı adını hedef kullanıcının kullanıcı adı ile değiştirin veya tüm alt kabuğu kullanıcının kullanıcı adı ile değiştirin. Bu, launchctl'a kullanıcıların oturum açma oturumunu ayırmasını söyler (gui, özellikle kullanıcının geçici oturum açma oturumunu belirtir, kullanıcı arka plan işlemlerini belirtir).

Bunu sudosınamak için oturumu kapatabilirsiniz .

Bunun SADECE macOS 10.11.x veya daha yenisinde çalışacağını unutmayın ( launchctl helpdaha fazla bilgi için bkz .)


1
SADECE sorunuzu tekrar okudum ve bunun size yardımcı olmayacağına üzüldüm, ancak google arama sonuçlarında ortaya çıkacak.
Iain Henderson,

29

Tamamen terminalden (veya uzak bir ssh oturumundan) çıkmak için login penceresini kapatmanız yeterlidir:

sudo pkill loginwindow

Birden fazla kullanıcının bir oturum açma penceresi işlemi varsa, hoşunuza gidebilir ve kullanıcıyı belirtebilirsiniz, ancak bu, kullanıcının tek bir oturumunu sonlandırmanın kolay bir yoludur.


16

Bu geçmişte benim için çalıştı:

Çıkış (onay ile)

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

Doğrudan çıkış yap (onay yok)

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

veya

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

Bu şekilde çalışan herhangi bir uygulama fark edilir ve güvenli bir şekilde sonlandırılır.


osascript -e 'hatayı gösteren "event aevtrlgo»' uygulamasına "Sistem Olayları" nı söyleyin: a "<" cümlesine devam edemez.
prateeak ojha

Hmm, benim için iyi çalışıyor. Komut satırı yerine bir kabuk betiğinden deneyebilir misiniz, belki kabuk burada garip şeyler yapar.
nohillside

OP'nin başka bir sorunu olduğunu ve normal komutların buradaki yorumlardan ve soru tanımından kapatıldığını tahmin ediyorum.
bmike

5
Unutmayın «≠ <<
mlainz

2

Birden fazla kullanıcınız varsa ....

İşlem Kimliğini Şununla Bulun:

ps aux|grep login

O zaman bu süreci öldürün ve oturumu kapattınız. Ancak geriye kalan birçok işlem var.

pstreeHangi süreci sonlandırmanız gerektiğini öğrenmek için kontrol edin .


2

Bu benim için hile yapar.

sudo -s

Bazı kök ayrıcalıklarını ve # istemini almak için işlemleri sonlandırın.

killall -vu username -HUP

Ve hepsi gitmediyse. Nuke em! Zorunlu uyarı - kök olarak işleri öldürmek geri almadı ve hayır "" nadiren makineyi yenilmez hale getirebilecek sistem kritik veritabanları da dahil olmak üzere dosyalarınızı kaydetmeden bu işlemi durdurmak istediğinizden emin misiniz? " uyarıları yazın.

killall -vu username -9

1
Kök kabuğuna gerek yok - sadece
öldürme

1

Terminalinize eklemek için güzel bir yardımcı program gibi kullanılacak "logout" komutudur:

logout UserName

İşte nasıl:

  1. .Bash_profile dosyanızı düzenleyin

    nano ~/.bash_profile

  2. Bu satırı ekle:

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

  3. Tuşuna basarak dosyayı kaydedin. ctrl+x

  4. Terminali yeniden başlat

Gitmeye hazırsın ;)


Vücudu yeni bir çizgiye bölmek ve daha sonra da kapanış kaşlı ayracı koymak zorunda kaldım.
bmauter

@bmauter benim için değil, önerilen biçimde mükemmel çalışıyor.
Kappe

-3

Eğer ssh ile uzaktaki bir bilgisayara giriş yaptıysanız, sadece 'exit' yazarak çıkış yapabilirsiniz:

[host:~user]$ exit
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.