Dlaczego mój terminal zawiesza się?


11

Czasami, gdy mój terminal zawiesza się i nie pozwala mi pisać. Nie mogę zidentyfikować żadnych przyczyn ani sposobu diagnozowania. Jakieś sugestie?

Dzięki!

GNOME Terminal 2.30.2 na Ubuntu 10.04


2
zwykle, gdy terminal zawiesza się, jest to spowodowane przez inną aplikację w tle używającą zbyt wielu zasobów, np. CPU lub Disk I / O. Jeśli uruchamiasz się topw terminalu, powinieneś być w stanie łatwo zlokalizować problem.
RolandiXor

@roland - brzmi jak catch-22, ale dobra rada, ponieważ czasami, gdy jeden terminal jest zamrożony, mogę otworzyć inny i zadziała.
David LeBauer,

Wiem, prawda? :) Jest to trochę chwytliwe 22, ale często działa dla mnie.
RolandiXor

Odpowiedzi:


14

Dobry ogólny sposób diagnozowania tajemniczych zawieszeń:

  1. otwórz terminal (inny) i użyj, ps axo pid,wchan:32,cmdaby znaleźć inny identyfikator procesu
  2. zwróć uwagę na wchankolumnę, która powinna ci powiedzieć, czy utknął w jądrze
  3. uruchom sudo strace -p PIDwstawiając pid tego procesu; wklej to do raportu o błędzie lub pytania

Jeśli jest coś oprócz kreski w kolumnie wchan, to proces polega na tym, że jądro coś robi. Niektóre typowe wartości:

  • futex_wait_queue_me - oczekiwanie na futexie na kolejny wątek w tym samym procesie
  • poll_schedule_timeout - czekanie na komunikację sieciową lub międzyprocesową lub po prostu spanie przez chwilę
  • pipe_wait - czytanie / pisanie fajki

Istnieją tysiące możliwości, więc nie mogę wymienić ich wszystkich. Zobacz, jaki jest „kanał oczekiwania” procesu? po więcej.


Bardzo przydatny do śledzenia błędów ogólnego przeznaczenia. Czy możesz zaktualizować swoją odpowiedź o obszerny opis? Jaki komunikat w wchan wskazuje, że program utknął w jądrze?
Salih Emin

Dzięki, Salih. Może powinniśmy mieć inne pytanie, jak ogólnie zdiagnozować problemy?
poolie

Jeśli ludzie są ciekawi innych wartości wchan, dodaj komentarz.
poolie

Wszelkie wchanoznacza proces czeka w jądrze. Jeśli pozostaje tam przez długi czas i nie ma żadnego dobrego powodu, aby słuchać sieci io, wtedy utknie. ;)
poolie

25

Czy nacisnąłeś kiedyś Ctrl + S? Jest to klawisz pauzy terminala, który zatrzymuje wszystkie dane wyjściowe, dopóki nie naciśniesz Ctrl-Q, aby wznowić.

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.