Wyloguj innego użytkownika bez pierwszego przełączenia na tego użytkownika

28

Moja żona używa osobnych kont i szybkiego przełączania użytkowników na MBP z uruchomionym 10.6. Czasami chcę ją wylogować, aby zwolnić trochę pamięci RAM, ale chciałbym uniknąć logowania się jako ona, wylogowania, a następnie zalogowania się ponownie jako ja.

Widziałem rozwiązanie końcowe ... czy jest lepszy sposób? Dzięki!

Richard Herron
źródło
5
Musisz lepiej zdefiniować „czy jest lepszy sposób”. Dla mnie niewiele (komputerowo) jest lepsze niż terminal. Jeśli chcesz aplikację, po prostu zawiń polecenie terminalu w aplikacji automatyzatora lub AppleScript.
2
@mankoff, dobra uwaga! Ale to nie jest forum Arch Linux, więc załóżmy, że chcę mieć GUI / wbudowane rozwiązanie :). Ale masz rację, mogę po prostu napisać skrypt powłoki.
Richard Herron
2
Oto link do rozwiązania skryptowego (widziałem to przed opublikowaniem, ale pochodzi z 2005 roku, więc założyłem, że do tej pory ta prosta funkcja musiała zostać włączona do GUI). forums.macrumors.com/showthread.php?t=118545
Richard Herron
nie ma wbudowanego rozwiązania GUI, o którym wiem ...
Robert S Ciaccio
OK, dziękuję, wszystko! Kiedy napiszę dobry skrypt, opublikuję go tutaj.
Richard Herron

Odpowiedzi:

22

Za pomocą terminalu możesz zabić jej loginwindowproces, a wszystkie otwarte programy zostaną zamknięte ... ale spowoduje to, że straci wszelką niezapisaną pracę! W rzeczywistości jest to powód, dla którego musisz się zalogować jako ona, aby się wylogować: Gdy logujesz się jako ona, wszystkie jej programy mają ponownie dostęp do GUI, dzięki czemu mogą prosić o potwierdzenie zamknięcia, zapisania zmian lub podjęcia innych działanie przed wylogowaniem.

Jeśli masz pewność, że ma ona tylko takie funkcje, jak przeglądarka internetowa, iTunes itp., A nie Pages, Word, Photoshop lub cokolwiek innego z dokumentami, możesz spróbować z terminalu:

kill `ps awwwwux | grep her_short_username | grep loginwindow | grep -v grep | awk "{ print \$2 }"`

W OSX 10.10.4: (niewielka edycja od ostatniego komentarza):

export pn=`ps awwwwux | awk '/her_short_username/ && /loginwind[o]w/ { print $2 }'`
sudo kill -9 $pn
Josh
źródło
1
Zgadzam się z ostrzeżeniem, że jeśli nie zalogujesz się, aby zobaczyć, co ona robi, nie wiesz, ile możesz ją kosztować, wylogowując ją.
Michael H.
Tak, masz rację. Przeważnie przeglądanie stron internetowych ... Ale kiedyś tak nie będzie! Dzięki!
Richard Herron,
4
Jeśli ją loginwindowwymusisz, Activity Monitor.appmożesz wygodnie zerknąć w tym samym czasie na inne procesy, które pozostawiła otwarte.
Jari Keinänen
1
Jeśli mimo wszystko uruchomisz Awk, wielu greppoleceń można łatwo uniknąć. ps awwwwux | awk '/her_short_username/ && /loginwind[o]w/ { print $2 } | xargs killi patrz także iki.fi/era/unix/award.html#grep
tripleee
1
po prostu napraw literówkę w zaktualizowanym poleceniu, odczyty sudupowinny czytać sudo.
hoss
18

Możesz użyć Monitora aktywności, aby wylogować innego użytkownika, zabijając jego proces logowania:

  1. Uruchom Monitor aktywności
  2. W filtrze w prawym górnym rogu wpisz loginwindow
  3. Kliknij wiersz z nazwą użytkownika w kolumnie Użytkownik
  4. Kliknij Zakończ proces , a następnie Wymuś zamknięcie i wpisz hasło.

To jest po prostu ładniejsza (?) Wersja GUI odpowiedzi Josha .

Przed krokiem 2 możesz przejrzeć uruchomione procesy innego użytkownika, aby sprawdzić, czy działają aplikacje, które mogą utracić dane podczas wylogowywania.

Bennett McElwee
źródło
Próbowałem tego i nadal widzę procesy innego użytkownika uruchomione w monitorze aktywności. To prawda, że ​​konto jest wylogowane w menu przełączania użytkowników, ale nie jest tak naprawdę jak wylogowanie.
Gorb
8

To polecenie jest prostsze niż sugerowane i spowoduje pożądany efekt zabicia wszystkich procesów użytkownika (musiałem go uruchomić dwa razy)

sudo pkill -9 -u user

Jeśli chcesz tylko zabić proces logowania do tego użytkownika, możesz wykonać następujące czynności:

sudo pkill -9 -u user loginwindow

Ulukai
źródło
1
Wydaje mi się, że jest to zdecydowanie lepsza i bardziej idiomatyczna odpowiedź (z punktu widzenia uniksowego systemu administracyjnego) niż inne.
Gregg Leventhal
2

Myślę, że najprostszym sposobem na to jest: sudo killall -9 -u nazwa_wifes

mempman
źródło
W MacOS Mojave jest to jedyne rozwiązanie po wypróbowaniu wielu, które nie tylko zabiły proces LoginWindow, ale także wiele innych procesów należących do tego użytkownika. Zabicie samego procesu LoginWindow dla tego użytkownika nie zabiło wielu innych procesów uruchomionych przez tego użytkownika. To rozwiązanie (zastępując imię mojej żony) pozbyło się każdego procesu rozpoczętego przez jej logowanie. Podobnie jest z ponownym uruchomieniem komputera i zalogowaniem się.
i-CONICA
-1

Moim zdaniem możliwa utrata danych znacznie przewyższa możliwy wzrost pamięci RAM.

Co więcej, minęło sporo czasu, odkąd Unix mógł zamieniać pamięć na dysk, gdy proces był bezczynny.

mouviciel
źródło
2
Jednym z problemów jest to, że kiedy użytkownik jest wyłączony, jego procesy mogą nie być bezczynne. Mogą żuć procesor i pamięć. Gry wydają się szczególnie złe pod tym względem.
Bennett McElwee
2
Pytanie wspomina o żonie, ale w rzeczywistości jest jeszcze lepszy przypadek - gdy masz dziecko, które przekroczyło limit dnia i gra tylko w gry i robi inne rzeczy, które nie wymagają oszczędzania. Teraz musisz nie tylko zalogować się jako dziecko, ale dodać czas, aby się wylogować.
Michael
@Michael To jest dokładnie mój przypadek użycia. :)
Bennett McElwee