Cosa indica lo stato di "sonno interrompibile"?


18

Avevo Firefox in esecuzione su un Parted Magic LiveCD, quindi (probabilmente) a seguito di una combinazione di tasti che non ricordo, svanì rapidamente dallo schermo e dalla barra delle applicazioni / Elenco finestre.

Tuttavia:

  1. ps ax | grep firefoxrestituisce il seguito (e la grep firefoxlinea non necessaria ). Sia psil Task Manager della GUI, mostrano firefox con RSS apparentemente immutabile, VM-SIZE e 0% di utilizzo della CPU.

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


  2. pstree | grep firefox ritorna:

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


  3. strace -p 1916 ritorna e sembra rimanere su questa linea per sempre:

    futex(0xac975608), FUTEX_WAIT_PRIVATE, 1, NULL

Capisco da una risposta a Cosa significano i valori della colonna STAT in ps? che S(in Sl) indica che il processo è in uno interruptible sleepstato.

Qualcuno può elaborare quale sia lo stato, in modo più dettagliato?

MODIFICARE

Inizierò una nuova domanda, con maggiori dettagli sulla mia distribuzione, per rispondere alla seconda domanda originale.


@Braiam - Fatto. Sono stato riluttante a farlo, come la prima volta che l'ho fatto, in qualche modo l'aiuto si è allontanato dal problema, in discussioni basate sulla convinzione che stavo usando Parted Magic come mia distribuzione a tempo pieno. Spero sinceramente che questo non accadrà questa volta :(
user66001

Risposte:


18

@msw ha fatto un buon lavoro spiegando il tuo 2 ° Q, e alcuni dei tuoi 1 °:

B) Suggerisci qualche modo relativamente semplice per riguadagnare qualsiasi forma di controllo, per (almeno) salvare le schede che avevo fastidiosamente aperto in modalità Navigazione privata?

Quindi proverò ad affrontare un po 'di più la tua 1a Q:

A) Elaborato su cosa sia lo stato, in modo più dettagliato?

I valori di stato Sl(Questa è una L minuscola):

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

                 ciclo di vita del processo

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

Ulteriori dettagli sono disponibili nella pagina man del segnale man 7 signal, così come in questo tutorial, intitolato: Stati del processo Linux .


Molto (!) Utile per comprendere i meccanismi interni. Grazie! +1
user66001

@ user66001 accetta la risposta. Mi aiuti anche grazie.
muneeb_ahmed,

8

Non hai fatto nulla per il processo di Firefox. Prima era già nello stato S. "Sonno interrompibile" significa effettivamente inattivo. Il processo è in attesa e si sveglia quando riceve un input. Questo è lo stato normale di un processo a meno che non lo si rilevi mentre è occupato.

Hai fatto scomparire la finestra. Forse l'hai inviato a un desktop diverso. Come riportarlo nel modo "normale" dipende interamente dal gestore delle finestre, che non è stato specificato.

Potresti essere in grado di recuperare la finestra con altri strumenti, ma in qualche modo dipende da cosa è successo esattamente e se il tuo gestore di finestre collabora. Prova wmctrl . Prima elenca le finestre di Firefox con wmctrl -l | grep Firefox. Nota l'ID della finestra nella prima colonna, ad esempio 0x12345678. Per riportare una finestra sul desktop corrente, usare wmctrl -R 0x12345678; in alternativa, utilizzare wmctrl -a 0x12345678per passare al desktop. Per ingrandirlo (che si occupa delle finestre fuori dallo schermo o si riduce a un singolo pixel), esegui wmctrl -r 0x12345678 -b add,maximized_vert,maximized_horz. In alternativa, spostare e ridimensionare la finestra con wmctrl -r 0x12345678 -e 1,50,100,1000,800. Potrebbe essere necessario rimuovere l'ombra o scoprire la finestra con wmctrl -r 0x12345678 -b remove,shadedo wmctrl -r 0x12345678 -b remove,hidden.


Grazie Gilles - Può sembrare insolito, ma non sono sicuro di quale Window Manager sto eseguendo. Potrebbe essere LXDE (elencato in una scatola di circa LXPanel)? Inoltre, wmctrl non sembra essere disponibile sulla mia distribuzione - Per favore, perdona la mia ignoranza, ma wmctrl può essere semplicemente scaricato ed eseguito, o deve essere installato (dipendenze, ecc.)?
user66001

@ user66001 LXDE è un ambiente desktop. Il suo gestore di finestre predefinito è Openbox (non sono sicuro che ne supporti uno diverso). Se la tua distribuzione non ha wmctrl, puoi provare a scaricare il sorgente e compilarlo. Dipende da alcune librerie, ma nessuna di esse è esotica, dovrebbero essere tutte fornite dalla tua distribuzione. Se hai xdotool, potrebbe essere in grado di fare tutto questo, o almeno quello che è utile, quindi provalo (guarda i comandi della finestra e i comandi del desktop e della finestra nel manuale).
Gilles 'SO- smetti di essere malvagio' il

Ah grazie. No xdotoolo - quando si intende che "può essere in grado di fare tutte queste", sta parlando la compilazione wmctrl, o le operazioni che è possibile eseguire con esso? Potete indicarmi le guide consigliate per la compilazione di fonti Linux (nuove su Linux, da un ambiente Windows)?
user66001,

@ user66001 Intendevo questo xdotoole wmctrlhanno funzionalità simili (per quanto riguarda ciò di cui hai bisogno, differiscono per cos'altro offrono). Se non conosci Linux, ti consiglio una distribuzione con più pacchetti. Se stai eseguendo RHEL o una variante come CentOS o Scientific Linux, c'è un pacchetto su Repoforge . Se vuoi compilare dal sorgente, leggi questo - ma sarebbe più facile installare un pacchetto se ne trovi uno.
Gilles 'SO- smetti di essere malvagio' il

Qualche differenza in quale strumento dovrebbe essere più facile da costruire? Inoltre, se uno non aveva un gestore di pacchetti nella sua distribuzione, che tipo di? Pacchetto? dovremmo cercare (suppongo che questa sia una domanda illogica, ma nel caso in cui sbaglio nel ritenere che un pacchetto sia solo un insieme di binari, con le dipendenze elencate e le modifiche di configurazione, pensate che avrei chiesto)?
user66001,

2

È possibile che i client X perdano la connessione e in qualche modo non vengano notificati. Il processo spesso attenderà sul socket attraverso il quale non accadrà mai nulla, lasciandolo in un sonno ininterrotto.

Per Firefox solo (e alcuni altri programmi come Gvim o Chrome che rendono disposizioni particolari per la memorizzazione dello stato in fallimento) un semplice:

$ kill -TERM pid

darà al processo la possibilità di salvare l'elenco delle schede aperte, ma non conterei sul contenuto del modulo o su altri stati da conservare.


È piuttosto improbabile che un client X locale perda la connessione con il server X, soprattutto a causa della pressione di un tasto. Uccidere Firefox non salverebbe le informazioni su Windows in modalità di navigazione privata.
Gilles 'SO- smetti di essere malvagio' il

Uso Lazarus e (quando non utilizzo la modalità Navigazione privata per provare a cambiare il mio account Gmail principale, apro gdocs per visualizzare / modificare i documenti utilizzando le informazioni dai siti Web nelle schede adiacenti, senza disconnettermi da tutti i miei account Gmail - Grr, Google) hanno FF "Ricorda le mie finestre e schede dall'ultima volta", quindi mi preoccupo solo delle schede aperte nella modalità Navigazione privata. Quindi, mentre è bene conoscere l'argomento di cui sopra kill, dubito che FF salverebbe le mie schede in questa situazione. In che modo FF può ricollegarsi a X?
user66001,

"In qualche modo FF può ricollegarsi a X?" poiché non sono mai stato in grado di capire come la finestra possa essere smascherata / distrutta senza che il processo client riceva un segnale, suppongo che il socket dal programma FF all'interfaccia utente rimanga aperto. Finché un processo è collegato a un socket, non so in alcun modo che qualsiasi processo possa attingere a questo. (Ora che mi hai fatto riflettere, ho il sospetto che questo provenga da un errore di protocollo tra il server X e il client che è incredibilmente difficile (cioè non proverei mai) a eseguire il debug).
msw
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.