Jak ubijać martwe procesy w Linuksie?


(Adrian2) #1

Ostatnio trafiła mi się taka sytuacja. Oglądałem nagranie we flashu na pełnym ekranie. Po kilkunastu minutach nastąpił prawdopodobnie crash flasha. Ekran się rozjechał, tylko dźwięk odtwarzał się dalej. Ale nie o to chodzi.

Nie mogłem w tamtym momencie w żaden sposób wrócić do pulpitu, by np. ubić przeglądarkę i flasha i wyjść z opresji. Bezradny po prostu zresetowałem cały system.

W przyszłości chciałbym uniknąć podobnej sytuacji. W Windowsie wiedziałbym co robić- ctrl+shift+esc i ubić proces z poziomu menedżera. A jak to zrobić na linuksie?? .

Używam środowiska Xfce na ubuntu.

Proszę o pomoc.


(roobal) #2

Przełączn się na konsole kombinacją ctrl alt f1. Zaloguj sie i ubij proces. Procesy podejrzysz poleceniem ps. Możesz też zrobić to tak.

 

kill -9 $(ps -e | grep firefox | awk '{print $1}')

Oczywiście w miejsce firefox możesz wstawić dowolną nazwę aplikacji.

Jeśli wolisz sobie wyklepać klawiszami, doinstaluj htop, wsazujesz proces i wybierasz opcję zakończenia.


(dragonn) #3

A nie prościej:

kill -9 $(pgrep firefox)

Tylko nie jestem pewny czy to narzędzie jest domyślnie w każdej dystrybucji.


(scripter1) #4

Kolega poruszył bardzo istotną kwestię i chętnie pomogę.

Przede wszystkim trzeba wiedzieć że linux to jądro otoczone środowiskiem graficznym uruchamianym w konsoli w odróżnieniu do windowsa w którym środowisko graficzne (nie mówię tu o procesie explorer.exe który jest jedynie menedżerem plików uruchamianym w środowisku graficznym) jest ściśle zintegrowane z systemem prze co jego zawieszenie skutkuje zawieszeniem całego systemu (w windowsie nie ma konsoli jako takiej tylko jej emulator/interpreter poleceń uruchamiany w trybie graficznym).

W linuxie jest 7 konsol wbudowanych przypisanych do klawiszy od F1 do F7 między którymi przełącza się wywołując daną konsolę kombinacją klawiszy Alt+Fx (Alt+F1 dla konsoli pierwszej) a aby z trybu graficznego przełaczyć się do konsoli trzeba jeszcze dodatkowo w tej kombinacji użyć klawisza Ctrl (czyli żeby przełączyć się z trybu graficznego do konsoli 1 trzeba użyć kombinacji Ctrl+Alt+F1).

Tryb graficzny jest uruchamiany w konsoli 7 więc dla pozostałych zastosowań pozostają konsole od 1 do 6 ale między wszystkimi siedmioma konsolami można się swobodnie w każdej chwili przełączać.

A teraz do sedna, w przypadku takim jak wspomniany przez ciebie (zawieszenie się jakiegoś programu skutkującego zawieszeniem środowiska graficznego) zrób tak:

  • przełączasz się do konsoli np 1 kombinacją Ctrl+Alt+F1;
  • logujesz się jako użytkownik swoją nazwą użytkownika i hasłem lub jako root z jego hasłem (uwaga: przy wpisywaniu hasła nie pojawiają się gwiazdki jak to jest w windowsie i różnych formularzach ale hasło jest przyjmowane) - ważne żeby hasło użytkownika było ustawione bo jeśli użytkownik lub root nie mają hasła do logowania to nie da się zalogować z poziomu konsoli;
  • wpisujesz komendę ps -A (wielkość liter ma znaczenie; przełącznik -A wyświetli wszystkie procesy) i odszukujesz na liście procesów PID procesu sprawiającego problem - jeśli problem dotyczył konkretnie jakiejś wtyczki w firefoxie to wystarczy zabić sam kontener wtyczek który w przeglądarkach mozilli nazywa się plugin-container i jest widoczny jako osobny proces a przeglądarką może dalej działać (wystarczy potem odświeżyć stronę);
  • teraz wpisujesz polecenie kill (lub kill -9 który wyśle bardziej dobitny sygnał zabicia) podając nr PID procesu który chcesz ubić, zakładając dla przykładu że chcesz ubić proces plugin-container który zakładając dla przykładu by miał PID 3120 (to tylko przykład i PID zawsze trzeba sprawdzić) wpisujesz komendę kill 3120 (lub kill -9 3120 aby definitywnie ubić proces), w moim przypadku zawsze wystarcza samo kill z podaniem PID które wysyła sygnał TERM ale użycie kill -9 z podaniem PID zadziała zawsze;
  • teraz możesz się wylogować w konsoli poleceniem exit i powrócić do trybu graficznego kombinacją Alt+F7.
    Dodam jeszcze że miałem przypadek że jeden proces tak bardzo obciążał system że nie tylko blokował środowisko graficzne ale dodatkowo po wciśnięciu Ctrl+Alt+F1 musiałem odczekać ok 20 sekund zanim się przełączył na konsolę i przy logowaniu też był kilku sekundowy lag ale po ubiciu tego procesu wszystko wróciło do normy i już system normalnie szybko odpowiadał.

Trochę się rozpisałem ale myślę że te informacje są ważne dla każdego niezaznajomionego w środowisku linux a podana metoda jest najbardziej profesjonalna i najbardziej uniwersalna bo korzysta tylko z poleceń ps i kill które są w każdej dystrybucji i zawsze są standardowo zainstalowane.


(nintyfan) #5

W środowisku KDE4 naciskasz CTRL+ESC


(roobal) #6

Kolega pisał, że ma XFCE.


(Frankfurterium) #7

Konsolowe narzędzie htop. Proste i potężne.


(MrQ) #8

 

Nie prościej

killall -9 firefox

? :slight_smile:


(roobal) #9

Można też i tak. Ja korzystam ze swojego sposobu, bo niekiedy nie pamietam całej nazwy procesu lub procesy mają wspólny człon i ubijam kilka na raz w taki sposób.

O widzisz, o pgrepie nie wiedziałem :wink:


(bart86) #10

pkill firefox zabije wszystkie procesy, które mają w nazwie firefox


(scripter1) #11

Postanowiłem podsumować podane to sugestie.

Podane przez pozostałych sugestie są dobre gdy wiesz jaki proces chcesz ubić ale dodatkowo wykorzystują komendy/programy które mogą nie być zainstalowane - komendy grep , pgrep czy htop choć są podstawowe to nie w każdej dystrybucji są standardowo instalowane.

Komenda top teoretycznie powinna być standardowo zainstalowana ale podobnie jak komenda htop pokazuje tylko procesy najbardziej obciążające system, w sytuacji takiej jak podana w pierwszym poście powinno jej użycie wskazać winowajcę ale należy pamiętać że pokazywana przez te komendy lista procesów nie jest kompletna.

Natomiast komenda ps -A pokazuje kompletną listę procesów umożliwiając znalezienie PID i potem ubicie dowolnego procesu co znacznie rozszerza możliwości bo można np. znaleźć i ubić proces który nie obciąża systemu ale siedzi w tle i z jakiegoś powodu nam przeszkadza.

Dodatkowo poszukałem trochę w sieci i znalazłem że używając komendy ps -A aux uzyskamy pełną listę procesów oraz dodatkowo informacje o tym ile każdy z nich używa pamięci oraz procesora co ułatwia znalezienie winowajcy.

A ponieważ lista procesów potrafi być długa i nie mieścić się cała w widoku konsoli warto użyć komendy ps -A aux | less która umożliwia swobodne przewijanie listy strzałkami w górę i w dół nawet w pełnoekranowej konsoli, przerwanie działania polecenia oczywiście standardową kombinacją Ctrl+Z (podobnie jak zakończenie działania poleceń top, htop i innych działających w pętli).

Muszę jeszcze nadmienić że choć użyte tu polecenie less jest jednym z podstawowych to może się zdarzyć że w jakiejś dystrybucji nie będzie ono standardowo zainstalowane.


(dragonn) #12

scripter1 o ile pkill, pgrep czy htop faktycznie mogą nie znajdować się w każdej dystrybucji standardowo to o tyle nie spotkałem się jeszcze z dystrybucją bez grep, nawet na Androdzie jest grep dostępny.


(scripter1) #13

dragonn, ja się spotkałem z dystrybucją live która nie miała komendy less i jak dobrze pamiętam komendy grep też tam nie było.

Właściwie to dystrybucji bardziej i mniej standardowych jest tyle że można się spodziewać nawet istnienia distro pozbawionych nawet tak podstawowych komend jak ps czy kill choć z użytkowego punktu widzenia byłoby to raczej bez sensu.


(bart86) #14

Pkill powinno być chyba wszędzie a htop powinno być w repo dystrybucji przynajmniej w Debianie tak jest


(roobal) #15

Nic nie szkodzi. Nie ma potrzeby używania less. Żeby poruszać się po konsoli góra dół wystarczy kombinacja klawiszy ctrl+page up/page down.


(scripter1) #16

U mnie (mam OpenSUSE 13.1) to tak nie działa, bez komendy less nie da się przewijać a kombinacja klawiszy ctrl+page up/page down skutkuje jedynie wyświetleniem odpowiadającego tym kombinacjom kodu/sygnału.


(darekkkk) #17

No trzeba Wam przyznać, że potraficie do tego Linuksa ... zniechęcić :slight_smile:

Od takiej komendy to potrafi się zakręcić w głowie :slight_smile:


(bart86) #18

No w sumie więcej pisania niż zabijania :smiley:


(roobal) #19

No to dziwne.

Bez przesady :wink: Poza tym te polecenie podałem jako propozycję jedną z wielu, więc nie wiem po co ten offtopic.


(Adrian2) #20

Bardzo dziękuję za tak szeroki odzew z Waszej strony :wink:

Poskładałem sobie Wasze porady do kupy i wyłoniłem z nich najszybszy sposób.

 

  1. Przełączenie się do konsoli kombinacją Ctrl+Alt+F1 i zalogowanie się

  2. Uruchomienie narzędzia htop (które już doinstalowałem)

  3. Ubicie odpowiedniego procesu powyższym narzędziem

  4. Wylogowanie z konsoli poleceniem "exit" i powrót do trybu graficznego kombinacją Alt+F7

(ach gdybym więcej tych skrótów klawiaturowych znał to byłoby łatwiej :))

 

 

Mam nadzieję, że powyższa metoda jest prawidłowa.