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!


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

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.


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


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


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.


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
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.