Co oznacza stan „przerywany sen”?


18

Miałem Firefoksa działającego na Parted Magic LiveCD, a potem (prawdopodobnie) w wyniku kombinacji klawiszy, której nie pamiętam, szybko zniknął z ekranu i paska zadań / listy okien.

Jednak:

  1. ps ax | grep firefoxzwraca poniżej (i niepotrzebną grep firefoxlinię). Zarówno psmenedżer zadań GUI pokazują firefox z pozornie niezmiennymi RSS, VM-SIZE i 0% wykorzystania procesora.

    johndoe 1916 36,6 14,0 923772 504372 tty1 Sl 13:30 12:15 firefox


  2. pstree | grep firefox zwroty:

    init─┬─2 * [ROX-Filer───firefox───25 * [{firefox}]]


  3. strace -p 1916 powraca i pozornie pozostaje na tej linii na zawsze:

    futex(0xac975608), FUTEX_WAIT_PRIVATE, 1, NULL

Rozumiem z odpowiedzi na Co oznaczają wartości kolumny STAT w ps? to S(in Sl) wskazuje, że proces jest w interruptible sleepstanie.

Czy ktoś może bardziej szczegółowo opracować stan?

EDYTOWAĆ

Rozpocznę nowe pytanie, z bardziej szczegółowymi informacjami na temat mojej dystrybucji, aby odpowiedzieć na pierwotne drugie pytanie.


@Braiam - Gotowe. Nie chciałem tego robić, ponieważ po raz pierwszy pomogłem, jakoś odwróciłem się od problemu, w dyskusje oparte na przekonaniu, że wykorzystałem Parted Magic jako moją pełnoetatową dystrybucję. Mam szczerą nadzieję, że tym razem tak się nie stanie :(
user66001,

Odpowiedzi:


18

@msw wykonał dobrą robotę wyjaśniając twoje drugie pytanie, a niektóre z pierwszego:

B) Zaproponuj jakieś stosunkowo łatwe sposoby na odzyskanie jakiejkolwiek formy kontroli, aby (przynajmniej) zapisać zakładki, które irytująco otworzyłem w trybie przeglądania prywatnego?

Spróbuję więc zająć się twoim pierwszym pytaniem nieco bardziej:

A) Opracuj bardziej szczegółowo, jaki jest stan?

Wartości stanu Sl(to mała litera L):

   S    Interruptible sleep (waiting for an event to complete)
   l    is multi-threaded (using CLONE_THREAD, like NPTL pthreads do)

                 cykl życia procesu

PROCESS STATE CODES
   R  running or runnable (on run queue)
   D  uninterruptible sleep (usually IO)
   S  interruptible sleep (waiting for an event to complete)
   Z  defunct/zombie, terminated but not reaped by its parent
   T  stopped, either by a job control signal or because
      it is being traced
   [...]

Dalsze szczegóły można znaleźć na stronie man sygnału man 7 signal, a także w tym samouczku zatytułowanym: Stany procesu Linux .


Bardzo (!) Pomocny w zrozumieniu wewnętrznych mechanizmów. Dzięki! +1
66001

@ user66001 zaakceptuj odpowiedź. pomóż mi również dzięki.
muneeb_ahmed

8

Nie zrobiłeś nic z procesem Firefox. Wcześniej był już w stanie S. „Przerwany sen” skutecznie oznacza bezczynność. Proces czeka i obudzi się, gdy otrzyma dane wejściowe. Jest to normalny stan procesu, chyba że złapiesz go, gdy jest zajęty.

Sprawiłeś, że okno zniknęło. Może wysłałeś go na inny pulpit. Sposób przywrócenia „normalnego” sposobu zależy całkowicie od menedżera okien, którego nie określiłeś.

Możesz być w stanie odzyskać okno za pomocą innych narzędzi, ale w pewnym stopniu zależy to od tego, co dokładnie się z nim stało i od tego, czy menedżer okien współpracuje. Wypróbuj wmctrl . Najpierw wyświetl listę okien Firefox wmctrl -l | grep Firefox. Zanotuj identyfikator okna w pierwszej kolumnie, powiedzmy 0x12345678. Aby przywrócić okno do bieżącego pulpitu, użyj wmctrl -R 0x12345678; alternatywnie użyj, wmctrl -a 0x12345678aby przełączyć na pulpit. Aby go zmaksymalizować (który zajmuje się oknami poza ekranem lub zmniejszył się do jednego piksela), uruchom wmctrl -r 0x12345678 -b add,maximized_vert,maximized_horz. Możesz też przenieść i zmienić rozmiar okna za pomocą wmctrl -r 0x12345678 -e 1,50,100,1000,800. Konieczne może być usunięcie lub ukrycie okna za pomocą wmctrl -r 0x12345678 -b remove,shadedlub wmctrl -r 0x12345678 -b remove,hidden.


Dzięki Gilles - To może brzmieć nietypowo, ale nie jestem pewien, którego menedżera okien używam. Czy może to być LXDE (wymienione w polu o LXPanel)? Ponadto, wmctrl nie wydaje się być dostępny w mojej dystrybucji - Proszę wybaczyć moją ignorancję, ale czy wmctrl można po prostu pobrać i uruchomić, czy też musi być zainstalowany (zależności itp.)?
user66001 19.10.13

@ user66001 LXDE to środowisko graficzne. Jego domyślnym menedżerem okien jest Openbox (nie jestem pewien, czy obsługuje inny). Jeśli Twoja dystrybucja nie ma wmctrl, możesz spróbować pobrać źródło i skompilować je. To zależy od kilku bibliotek, ale żadna z nich nie jest egzotyczna, wszystkie powinny być dostarczone przez Twoją dystrybucję. Jeśli tak xdotool, może być w stanie wykonać wszystkie te, a przynajmniej te, które są przydatne, więc wypróbuj je (spójrz na polecenia okna i polecenia pulpitu i okna w instrukcji).
Gilles „SO- przestań być zły”,

Ach, dzięki. Nie xdotoolalbo - jeśli masz na myśli, że „może być w stanie wykonać wszystkie te”, czy mówisz o kompilacji wmctrl, czy operacjach, które możesz z nią wykonać? Czy możesz wskazać mi jakieś zalecane przewodniki dotyczące kompilowania źródeł Linuksa (nowość w systemie Linux, ze środowiska Windows)?
user66001,

@ user66001 Miałem na myśli to xdotooli wmctrlmają podobną funkcjonalność (jeśli chodzi o to, czego potrzebujesz tutaj, różnią się tym, co jeszcze oferują). Jeśli jesteś nowy w Linuksie, polecam dystrybucję z większą liczbą pakietów. Jeśli korzystasz z RHEL lub innego wariantu, takiego jak CentOS lub Scientific Linux, na Repoforge znajduje się pakiet . Jeśli chcesz budować ze źródła, przeczytaj to - ale łatwiej byłoby zainstalować pakiet, jeśli możesz go znaleźć.
Gilles „SO- przestań być zły”

Czy jest jakaś różnica w tym, które narzędzie powinno być łatwiejsze do zbudowania? Ponadto, jeśli nie ma menedżera pakietów w dystrybucji, jaki typ? Pakietu? należy szukać (myślę, że jest to nielogiczne pytanie, ale na wypadek, gdy mylę się zakładając, że pakiet jest tylko pakietem plików binarnych z wymienionymi zależnościami i zmianami konfiguracji, pomyślałem, że zapytam)?
user66001,

2

Klienci X mogą utracić połączenie i w jakiś sposób nie zostać o tym powiadomieni. Proces często czeka na gnieździe, przez które nic nigdy nie nastąpi, pozostawiając go w nieprzerwanym śnie.

Dla przeglądarki Firefox tylko (i innych programów, takich jak gvim lub Chrome, które sprawiają szczególne przepisy dotyczące przechowywania w stan awarii) prosty:

$ kill -TERM pid

da procesowi szansę na zapisanie listy otwartych kart, ale nie liczyłbym na zawartość formularza lub inny stan do zachowania.


Jest mało prawdopodobne, aby lokalny klient X utracił połączenie z serwerem X, szczególnie w wyniku naciśnięcia klawisza. Zabicie Firefoksa nie zapisałoby informacji o oknach w trybie przeglądania prywatnego.
Gilles „SO- przestań być zły”,

Korzystam z Lazarus i (gdy nie używam trybu przeglądania prywatnego, aby przełączyć się na moje podstawowe konto Gmail, aby otworzyć gdocs do przeglądania / edytowania dokumentów przy użyciu informacji z witryn internetowych przylegających do kart, bez wylogowywania się ze wszystkich moich kont Gmail) - Grr, Google) mają FF „Zapamiętaj moje okna i karty z ostatniego czasu”, więc dbam tylko o karty otwarte w trybie przeglądania prywatnego. Tak więc, chociaż dobrze jest znać powyższy argument kill, wątpię, aby FF zapisałbym moje zakładki w tej sytuacji. Jakikolwiek sposób, by FF ponownie przyłączył się do X?
user66001,

„Jakikolwiek sposób, by FF ponownie przyłączył się do X?” ponieważ nigdy nie byłem w stanie dowiedzieć się, w jaki sposób okno może zostać odwzorowane / zniszczone bez uzyskania przez proces klienta sygnału, zakładam, że gniazdo z programu FF do interfejsu użytkownika pozostaje otwarte. Tak długo, jak proces jest podłączony do gniazda, nie wiem, w jaki sposób jakikolwiek proces mógłby się do niego podłączyć. (Teraz, gdy kazałeś mi o tym pomyśleć, podejrzewam, że to błąd protokołu między serwerem X a klientem, który jest niesamowicie trudny (tj. Nigdy nie spróbowałbym) debugować).
msw,
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.