O que indica o estado de "interrupção do sono"?


18

Eu tinha o Firefox rodando em um Parted Magic LiveCD e, em seguida (possivelmente) como resultado de uma combinação de teclas que não me lembro, ele desapareceu rapidamente da tela e da barra de tarefas / lista de janelas.

Contudo:

  1. ps ax | grep firefoxretorna o abaixo (e a grep firefoxlinha desnecessária ). Tanto pso GUI Task Manager mostram o firefox com RSS aparentemente imutável, VM-SIZE e 0% de uso da CPU.

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


  2. pstree | grep firefox retorna:

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


  3. strace -p 1916 retorna e aparentemente permanece nesta linha para sempre:

    futex(0xac975608), FUTEX_WAIT_PRIVATE, 1, NULL

Eu entendo de uma resposta para o que significam os valores da coluna STAT em ps? que S(in Sl) indica que o processo está em um interruptible sleepestado.

Alguém pode elaborar mais detalhadamente o que é o estado?

EDITAR

Iniciarei uma nova pergunta, com mais detalhes na minha distribuição, para abordar a 2ª pergunta original.


@Braiam - Feito. Eu relutei em fazer isso, como a primeira vez que fiz, de alguma forma a ajuda se afastou do problema, em discussões baseadas na crença de que eu estava usando o Parted Magic como minha distro em tempo integral. Espero sinceramente que isso não aconteça desta vez :(
user66001

Respostas:


18

O @msw fez um bom trabalho ao explicar o seu segundo Q e alguns dos seus primeiros:

B) Sugira maneiras relativamente fáceis de recuperar qualquer forma de controle, para (pelo menos) salvar as guias que eu abria abertamente no modo Navegação privada?

Então, tentarei abordar seu primeiro Q um pouco mais:

A) Elaborar o que é o estado, com mais detalhes?

Os valores do estado Sl(é um L minúsculo):

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

                 ciclo de vida do 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
   [...]

Mais detalhes podem ser vistos na página de manual do sinal man 7 signal, bem como neste tutorial, intitulado: Linux process states .


Muito (!) Útil para entender o funcionamento interno. Obrigado! 1
user66001

@ user66001 aceite a resposta. também me ajuda, obrigado.
muneeb_ahmed

8

Você não fez nada no processo do Firefox. Já estava no estado S antes. "Sono interrompível" significa efetivamente ocioso. O processo está aguardando e será ativado quando receber uma entrada. Esse é o estado normal de um processo, a menos que você o pegue enquanto está ocupado.

Você fez a janela desaparecer. Talvez você tenha enviado para uma área de trabalho diferente. Como trazê-lo de volta da maneira "normal" depende inteiramente do seu gerenciador de janelas, que você não especificou.

Você pode recuperar a janela com outras ferramentas, mas isso depende um pouco do que exatamente aconteceu com ela e se o seu gerenciador de janelas coopera. Tente wmctrl . Primeiro, liste as janelas do Firefox wmctrl -l | grep Firefox. Observe o ID da janela na primeira coluna, diga 0x12345678. Para trazer uma janela de volta à área de trabalho atual, use wmctrl -R 0x12345678; alternativamente, use wmctrl -a 0x12345678para alternar para a área de trabalho. Para maximizá-lo (que cuida de janelas fora da tela ou reduziu para um único pixel), execute wmctrl -r 0x12345678 -b add,maximized_vert,maximized_horz. Como alternativa, mova e redimensione a janela com wmctrl -r 0x12345678 -e 1,50,100,1000,800. Pode ser necessário remover ou ocultar a janela com wmctrl -r 0x12345678 -b remove,shadedou wmctrl -r 0x12345678 -b remove,hidden.


Obrigado Gilles - Isso pode parecer incomum, mas não tenho certeza de qual gerenciador de janelas estou executando. Poderia ser LXDE (listado em uma caixa sobre o LXPanel)? Além disso, o wmctrl parece não estar disponível na minha distribuição - perdoe minha ignorância, mas o wmctrl pode apenas ser baixado e executado ou deve estar instalado (dependências, etc.)?
user66001

@ user66001 O LXDE é um ambiente de área de trabalho. Seu gerenciador de janelas padrão é o Openbox (não tenho certeza se ele suporta outro). Se sua distribuição não possui wmctrl, você pode tentar fazer o download da fonte e compilá-la. Depende de algumas bibliotecas, mas nenhuma delas é exótica, todas elas devem ser fornecidas pela sua distribuição. Se você tiver xdotool, pode ser capaz de fazer tudo isso, ou pelo menos o que é útil, então experimente (observe os comandos da janela e os comandos da área de trabalho e da janela no manual).
Gilles 'SO- stop be evil'

Ah obrigada. Não xdotoolquer - Quando você quer dizer que "pode ser capaz de fazer todas essas", você está falando sobre a compilação wmctrl, ou as operações que você pode realizar com ele? Você pode me indicar algum guia recomendado sobre a compilação de fontes Linux (novo no Linux, em um ambiente Windows)?
user66001

@ user66001 Eu quis dizer isso xdotoole wmctrltenho uma funcionalidade semelhante (quanto ao que você precisa aqui, eles diferem no que mais eles oferecem). Se você é novo no Linux, recomendo uma distribuição com mais pacotes. Se você estiver executando o RHEL ou uma variante como o CentOS ou o Scientific Linux, há um pacote no Repoforge . Se você deseja construir a partir do código-fonte, leia isto - mas seria mais fácil instalar um pacote se você encontrar um.
Gilles 'SO- stop be evil'

Alguma diferença em qual ferramenta deve ser mais fácil de construir? Além disso, se um não possui um gerenciador de pacotes em sua distribuição, que tipo de pacote? alguém deveria estar procurando (acho que essa é uma pergunta ilógica, mas, no caso de eu estar errada ao supor que um pacote seja apenas um pacote de binários, com dependências listadas e alterações de configuração, pensei em perguntar)?
user66001

2

É possível que os clientes X percam a conexão e de alguma forma não sejam notificados. O processo geralmente espera no soquete através do qual nada chegará, deixando-o em um sono ininterrupto.

Para Firefox única (e alguns outros programas como Gvim ou Chrome que fazem disposições especiais para armazenar estado em fracasso) um simples:

$ kill -TERM pid

dará ao processo a chance de salvar a lista de guias abertas, mas eu não contaria com o conteúdo do formulário ou outro estado a ser mantido.


É pouco provável que um cliente X local perca a conexão com o servidor X, principalmente como resultado do pressionamento de uma tecla. Matar o Firefox não salvaria informações sobre o Windows no modo de navegação privada.
Gilles 'SO- stop be evil'

Utilizo o Lazarus e (quando não estou usando o modo de Navegação Privada para tentar alternar em minha conta principal do gmail, abro gdocs para exibir / editar documentos usando informações de sites nas guias adjacentes às guias, sem sair de todas as minhas contas do gmail - Grr, Google) têm FF "Lembre-se de minhas janelas e guias da última vez", então eu só me importo com as guias abertas no modo Navegação privada. Portanto, embora seja bom conhecer o argumento acima kill, duvido que o FF salvaria minhas guias nessa situação. Existe alguma maneira de o FF se conectar novamente ao X?
user66001

"Existe alguma maneira de o FF se conectar novamente ao X?" porque nunca consegui descobrir como a janela pode ser mapeada / destruída sem que o processo do cliente receba um sinal, presumo que o soquete do programa FF para a interface do usuário permaneça aberto. Enquanto um processo estiver conectado a um soquete, não conheço nenhuma maneira de que qualquer processo possa entrar nele. (Agora que você me fez pensar sobre isso, suspeito que ocorra um erro de protocolo entre o servidor X e o cliente, que é incrivelmente difícil (ou seja, eu nunca tentaria) depurar).
msw
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.