Qu'est-ce que l'état de «sommeil interruptible» indique?


18

J'ai eu Firefox fonctionnant sur un LiveCD Parted Magic, puis (peut-être) à la suite d'une combinaison de touches dont je ne me souviens pas, il a rapidement disparu de l'écran et de la barre des tâches / liste des fenêtres.

Pourtant:

  1. ps ax | grep firefoxrenvoie la ligne ci-dessous (et la grep firefoxligne inutile ). Les deux, psainsi que le gestionnaire de tâches de l'interface graphique, affichent Firefox avec des flux RSS, VM-SIZE apparemment immuables et une utilisation CPU de 0%.

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


  2. pstree | grep firefox Retour:

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


  3. strace -p 1916 revient, et semble rester sur cette ligne pour toujours:

    futex(0xac975608), FUTEX_WAIT_PRIVATE, 1, NULL

Je comprends d'une réponse à Que signifient les valeurs de la colonne STAT en ps? cela S(en Sl) indique que le processus est dans un interruptible sleepétat.

Quelqu'un peut-il nous expliquer plus en détail ce qu'est l'État?

ÉDITER

Je vais commencer une nouvelle question, avec plus de détails sur ma distribution, pour répondre à la 2ème question d'origine.


@Braiam - Terminé. J'ai été réticent à le faire, car la première fois que je l'ai fait, l'aide s'est détournée du problème, en discussions basées sur la croyance que j'utilisais Parted Magic comme ma distribution à plein temps. J'espère sincèrement que cela ne se produira pas cette fois :(
user66001

Réponses:


18

@msw a fait du bon travail en expliquant votre 2e Q, et certains de vos 1er:

B) Suggérer des moyens relativement faciles de reprendre toute forme de contrôle, pour (au moins) sauvegarder les onglets que j'avais fâcheusement ouverts en mode de navigation privée?

Je vais donc essayer de répondre un peu plus à votre 1er Q:

A) Élaborez-vous sur ce qu'est l'État, plus en détail?

Les valeurs d'état Sl(c'est un L minuscule):

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

                 cycle de vie du processus

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

Plus de détails peuvent être vus dans la page de manuel de signal man 7 signal, ainsi que dans ce tutoriel, intitulé: Les états du processus Linux .


Très (!) Utile pour comprendre le fonctionnement interne. Merci! +1
user66001

@ user66001 accepte la réponse. aidez-moi aussi merci.
muneeb_ahmed

8

Vous n'avez rien fait au processus Firefox. Il était déjà dans l'état S auparavant. «Sommeil interruptible» signifie effectivement inactif. Le processus est en attente et se réveillera lorsqu'il recevra une entrée. C'est l'état normal d'un processus, sauf si vous l'attrapez lorsqu'il est occupé.

Vous avez fait disparaître la fenêtre. Vous l'avez peut-être envoyé sur un autre bureau. Comment le ramener de la manière «normale» dépend entièrement de votre gestionnaire de fenêtres, que vous n'avez pas spécifié.

Vous pourrez peut-être récupérer la fenêtre avec d'autres outils, mais cela dépend quelque peu de ce qui lui est exactement arrivé et de la coopération de votre gestionnaire de fenêtres. Essayez wmctrl . Listez d'abord les fenêtres Firefox avec wmctrl -l | grep Firefox. Notez l'ID de fenêtre dans la première colonne, par exemple 0x12345678. Pour ramener une fenêtre sur le bureau actuel, utilisez wmctrl -R 0x12345678; Alternativement, utilisez wmctrl -a 0x12345678pour basculer vers son bureau. Pour l'agrandir (qui prend soin des fenêtres en dehors de l'écran ou réduites à un seul pixel), exécutez wmctrl -r 0x12345678 -b add,maximized_vert,maximized_horz. Vous pouvez également déplacer et redimensionner la fenêtre avec wmctrl -r 0x12345678 -e 1,50,100,1000,800. Vous devrez peut-être masquer ou afficher la fenêtre avec wmctrl -r 0x12345678 -b remove,shadedou wmctrl -r 0x12345678 -b remove,hidden.


Merci Gilles - Cela peut sembler inhabituel, mais je ne sais pas quel gestionnaire de fenêtres j'utilise. Serait-ce LXDE (répertorié dans une boîte à propos de LXPanel)? De plus, wmctrl ne semble pas être disponible sur ma distribution - Veuillez pardonner mon ignorance, mais wmctrl peut-il simplement être téléchargé et exécuté, ou doit-il être installé (dépendances, etc.)?
user66001

@ user66001 LXDE est un environnement de bureau. Son gestionnaire de fenêtres par défaut est Openbox (je ne sais pas s'il prend en charge un autre). Si votre distribution n'a pas wmctrl, vous pouvez essayer de télécharger la source et de la compiler. Cela dépend de quelques bibliothèques, mais aucune n'est exotique, elles devraient toutes être fournies par votre distribution. Si c'est le cas xdotool, il peut être capable de faire tout cela, ou au moins celui qui est utile, alors essayez-le (regardez les commandes de fenêtre et les commandes de bureau et de fenêtre dans le manuel).
Gilles 'SO- arrête d'être méchant'

Ah merci. Non xdotoolnon plus - quand vous voulez dire qu'il "peut être capable de faire tout cela", parlez-vous de la compilation wmctrlou des opérations que vous pouvez effectuer avec? Pouvez-vous m'indiquer des guides recommandés sur la compilation de sources Linux (nouveau sur Linux, à partir d'un environnement Windows)?
user66001

@ user66001 Je voulais dire cela xdotoolet wmctrlavoir des fonctionnalités similaires (en ce qui concerne ce dont vous avez besoin ici, ils diffèrent dans ce qu'ils offrent d'autre). Si vous êtes nouveau sur Linux, je recommande une distribution avec plus de packages. Si vous exécutez RHEL ou une variante telle que CentOS ou Scientific Linux, il existe un package sur Repoforge . Si vous voulez construire à partir des sources, lisez ceci - mais il serait plus facile d'installer un paquet si vous en trouvez un.
Gilles 'SO- arrête d'être méchant'

Y a-t-il une différence dans quel outil devrait être plus facile à construire? De plus, si l'on n'avait pas de gestionnaire de paquets dans leur distribution, quel type de? Paquet? faut-il rechercher (je suppose que c'est une question illogique, mais juste au cas où je me trompe en supposant qu'un paquet n'est qu'un paquet de binaires, avec des dépendances répertoriées et des changements de configuration, pensais-je demander)?
user66001

2

Il est possible pour les clients X de perdre leur connexion et de ne pas en être informés. Le processus attendra souvent sur la prise à travers laquelle rien ne viendra jamais, le laissant dans un sommeil sans interruption.

Pour Firefox uniquement (et certains autres programmes comme Gvim ou Chrome qui prévoient des dispositions spéciales pour le stockage de l'état en échec), c'est simple:

$ kill -TERM pid

donnera au processus une chance d'enregistrer la liste des onglets ouverts, mais je ne compterais pas sur le contenu du formulaire ou un autre état à conserver.


Il est plutôt improbable qu'un client X local perde la connexion avec le serveur X, en particulier à la suite d'une pression sur une touche. Tuer Firefox n'enregistrerait pas d'informations sur les fenêtres en mode de navigation privée.
Gilles 'SO- arrête d'être méchant'

J'utilise Lazarus , et (lorsque vous n'utilisez pas le mode de navigation privée pour essayer de basculer sur mon compte gmail principal, pour ouvrir gdocs pour afficher / modifier des documents en utilisant les informations des sites Web dans les onglets adjacents, sans vous déconnecter de tous mes comptes gmail - Grr, Google) ont FF "Se souvenir de mes fenêtres et onglets de la dernière fois", donc je ne me soucie que des onglets ouverts en mode de navigation privée. Donc, même s'il est bon de connaître l'argument ci-dessus kill, je doute que FF enregistre mes onglets dans cette situation. Est-il possible pour FF de se reconnecter à X?
user66001

"Y a-t-il un moyen pour FF de se rattacher à X?" parce que je n'ai jamais pu comprendre comment la fenêtre peut être démappée / détruite sans que le processus client reçoive un signal, je suppose que le socket du programme FF vers l'interface utilisateur reste ouvert. Tant qu'un processus est connecté à une prise, je ne connais aucun moyen pour qu'un processus puisse y puiser. (Maintenant que vous m'avez fait réfléchir, je soupçonne que cela vient d'une erreur de protocole entre le serveur X et le client qui est incroyablement difficile (c'est-à-dire que je n'essaierais jamais) de déboguer).
msw
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.