Was zeigt der Zustand „unterbrechbarer Schlaf“ an?


18

Ich hatte Firefox auf einer Parted Magic Live-CD ausgeführt, die dann (möglicherweise) aufgrund einer Tastenkombination, an die ich mich nicht erinnere, schnell vom Bildschirm und der Taskleiste / Fensterliste verschwand.

Jedoch:

  1. ps ax | grep firefoxgibt das Folgende (und die nicht benötigte grep firefoxZeile) zurück. Beide psund der GUI Task Manager zeigen Firefox mit scheinbar unveränderlichem RSS, VM-SIZE und 0% CPU-Auslastung.

    johndoe 1916 36.6 14.0 923772 504372 tty1 Sl 13:30 12:15 firefox


  2. pstree | grep firefox kehrt zurück:

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


  3. strace -p 1916 kehrt zurück und bleibt anscheinend für immer in dieser Zeile:

    futex(0xac975608), FUTEX_WAIT_PRIVATE, 1, NULL

Ich verstehe aus einer Antwort auf Was bedeuten die STAT-Spaltenwerte in ps? dass S(in Sl) gibt an, dass sich der Prozess in einem interruptible sleepZustand befindet.

Kann jemand genauer erläutern, was der Staat ist?

BEARBEITEN

Ich werde eine neue Frage mit weiteren Einzelheiten zu meiner Distribution starten, um die ursprüngliche zweite Frage zu beantworten.


@Braiam - Fertig. Ich habe mich geweigert, dies zu tun, als ich es das erste Mal tat, und irgendwie hat sich die Hilfe von dem Problem abgewendet, in Diskussionen, die auf der Überzeugung beruhten, dass ich Parted Magic als meine Vollzeitdistribution benutzte. Ich hoffe aufrichtig, dass dies dieses Mal nicht passiert :(
user66001

Antworten:


18

@msw hat gute Arbeit geleistet, um Ihr 2. Q und einige Ihrer 1. zu erklären:

B) Schlagen Sie eine relativ einfache Möglichkeit vor, die Kontrolle wiederzugewinnen, um (zumindest) die Registerkarten zu speichern, die ich ärgerlicherweise im privaten Browsermodus geöffnet hatte?

Also werde ich versuchen, Ihr erstes Q ein bisschen mehr anzusprechen:

A) Was ist der Staat im Detail?

Die Zustandswerte Sl(das ist ein Kleinbuchstabe L):

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

                 Lebenszyklus des Prozesses

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
   [...]

Weitere Details finden Sie in der Manpage für Signale man 7 signalsowie in diesem Tutorial mit dem Titel: Linux-Prozesszustände .


Sehr (!) Hilfreich für das Verständnis des Innenlebens. Vielen Dank! +1
user66001

@ user66001 akzeptiere die Antwort. Es hilft mir auch, danke.
muneeb_ahmed

8

Sie haben nichts mit dem Firefox-Prozess gemacht. Es war bereits im Zustand S vor. "Unterbrechbarer Schlaf" bedeutet effektiv Leerlauf. Der Prozess wartet und wacht auf, wenn eine Eingabe eingeht. Dies ist der normale Zustand eines Prozesses, sofern Sie ihn nicht abfangen, während er beschäftigt ist.

Sie haben das Fenster verschwinden lassen. Möglicherweise haben Sie es an einen anderen Desktop gesendet. Wie Sie es auf die "normale" Weise wiederherstellen können, hängt vollständig von Ihrem Fenstermanager ab, den Sie nicht angegeben haben.

Sie können das Fenster möglicherweise mit anderen Tools abrufen, aber es hängt etwas davon ab, was genau damit passiert ist und ob Ihr Fenstermanager zusammenarbeitet. Versuchen Sie es mit wmctrl . Listen Sie zuerst die Firefox-Fenster mit wmctrl -l | grep Firefox. Notieren Sie sich die Fenster-ID in der ersten Spalte, z. B. 0x12345678. Um ein Fenster wieder auf den aktuellen Desktop zu bringen, verwenden Sie wmctrl -R 0x12345678; Alternativ können Sie wmctrl -a 0x12345678mit zu seinem Desktop wechseln. Führen Sie den Befehl aus, um die Größe zu maximieren (dh Fenster außerhalb des Bildschirms zu bearbeiten oder auf ein Pixel zu verkleinern) wmctrl -r 0x12345678 -b add,maximized_vert,maximized_horz. Alternativ können Sie das Fenster mit verschieben und in der Größe ändern wmctrl -r 0x12345678 -e 1,50,100,1000,800. Möglicherweise müssen Sie das Fenster mit wmctrl -r 0x12345678 -b remove,shadedoder ein- oder ausblenden wmctrl -r 0x12345678 -b remove,hidden.


Vielen Dank Gilles - Das hört sich vielleicht ungewöhnlich an, aber ich bin mir nicht sicher, welchen Window Manager ich verwende. Könnte es LXDE sein (Aufgeführt in einer About-LXPanel-Box)? Außerdem scheint wmctrl in meiner Distribution nicht verfügbar zu sein. Bitte entschuldigen Sie meine Unkenntnis. Kann wmctrl nur heruntergeladen und ausgeführt werden oder muss es installiert werden (Abhängigkeiten usw.)?
User66001

@ user66001 LXDE ist eine Desktop-Umgebung. Der Standard-Fenstermanager ist Openbox (ich bin mir nicht sicher, ob er einen anderen unterstützt). Wenn Ihre Distribution nicht über wmctrl verfügt, können Sie versuchen, den Quellcode herunterzuladen und zu kompilieren. Es hängt von einigen Bibliotheken ab, aber keine davon ist exotisch. Sie sollten alle von Ihrer Distribution bereitgestellt werden. Wenn Sie dies xdotoolgetan haben , kann es möglicherweise all dies tun, oder zumindest das, was nützlich ist. Probieren Sie es aus (sehen Sie sich die Fensterbefehle und die Desktop- und Fensterbefehle im Handbuch an).
Gilles 'SO- hör auf böse zu sein'

Ah danke. Nein, auch xdotoolnicht - Wenn Sie meinen, es könnte "in der Lage sein, all dies zu tun", sprechen Sie über das Kompilieren wmctrloder über die Operationen, die Sie damit ausführen können? Können Sie mich auf empfohlene Handbücher zum Kompilieren von Linux-Quellen verweisen (Neu bei Linux, aus einer Windows-Umgebung)?
User66001

@ user66001 Ich meinte das xdotoolund wmctrlhabe ähnliche Funktionen (soweit du hier brauchst, unterscheiden sie sich in dem, was sie sonst noch bieten). Wenn Sie Linux noch nicht kennen, empfehle ich eine Distribution mit mehr Paketen. Wenn Sie RHEL oder eine Variante wie CentOS oder Scientific Linux ausführen , gibt es ein Paket auf Repoforge . Wenn Sie aus dem Quellcode erstellen möchten, lesen Sie dies. Es ist jedoch einfacher, ein Paket zu installieren, wenn Sie eines finden.
Gilles 'SO- hör auf böse zu sein'

Gibt es einen Unterschied, welches Tool einfacher zu bauen sein soll? Auch wenn man keinen Paketmanager in der Distribution hatte, welche Art von Paket? sollte man suchen (ich denke, dass dies eine unlogische Frage ist, aber nur für den Fall, dass ich falsch davon ausgehe, dass ein Paket nur ein Bündel von Binärdateien mit aufgelisteten Abhängigkeiten und Konfigurationsänderungen ist, dachte ich mir)?
User66001

2

Es ist möglich, dass X-Clients ihre Verbindung verlieren und nicht benachrichtigt werden. Der Prozess wartet oft auf die Steckdose, über die nie etwas kommt, und führt zu einem unterbrechungsfreien Schlaf.

Nur für Firefox (und einige andere Programme wie Gvim oder Chrome, die besondere Vorkehrungen für das Speichern des Status im Fehlerfall treffen):

$ kill -TERM pid

gibt dem Prozess die Möglichkeit, die Liste der geöffneten Registerkarten zu speichern, aber ich würde nicht mit dem Formularinhalt oder einem anderen zu behaltenden Status rechnen.


Es ist eher unwahrscheinlich, dass ein lokaler X-Client die Verbindung zum X-Server verliert, insbesondere durch Drücken einer Taste. Wenn Sie Firefox beenden, werden keine Informationen zu Fenstern im privaten Browsermodus gespeichert.
Gilles 'SO- hör auf böse zu sein'

Ich benutze Lazarus und (wenn ich nicht den privaten Browsermodus verwende, um mein primäres Google Mail-Konto zu wechseln) öffne ich Google Docs, um Dokumente mithilfe von Informationen von Websites neben den Registerkarten anzuzeigen / zu bearbeiten, ohne mich von allen meinen Google Mail-Konten abzumelden - Grr, Google) haben FF "Erinnere mich an meine Fenster & Tabs vom letzten Mal", daher kümmere ich mich nur um die Tabs, die im privaten Browsermodus geöffnet sind. Obwohl es gut ist, das obige Argument zu kennen kill, bezweifle ich, dass FF in dieser Situation meine Tabs retten würde. Gibt es eine Möglichkeit für FF, sich wieder an X anzuschließen?
User66001

"Gibt es eine Möglichkeit für FF, sich wieder an X anzuschließen?" da ich nie herausgefunden habe, wie das Fenster ohne ein Signal des Client-Prozesses entmappt / zerstört werden kann, gehe ich davon aus, dass der Socket vom FF-Programm zur Benutzeroberfläche offen bleibt. Solange ein Prozess mit einem Socket verbunden ist, weiß ich nicht, wie ein Prozess darauf zugreifen könnte. (Nun, da Sie mich zum Nachdenken veranlasst haben, vermute ich, dass dies auf einen Protokollfehler zwischen dem X-Server und dem Client zurückzuführen ist, dessen Debugging wahnsinnig schwierig ist (dh ich würde es nie versuchen).)
msw
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.