Por que meu terminal está congelando?

11

Às vezes, quando meu terminal congela e não me permite digitar. Não consigo identificar nenhuma causa, nem como diagnosticar. Alguma sugestão?

Obrigado!

Terminal GNOME 2.30.2 no Ubuntu 10.04

David LeBauer
fonte
2
geralmente quando o terminal congela, é causado por outro aplicativo em segundo plano, usando muitos recursos, como CPU ou E / S de disco. Se você rodar topem um terminal, poderá localizar o problema facilmente.
RolandiXor
@roland - soa como um catch-22, mas é um bom conselho, já que, às vezes, quando um terminal está congelado, posso abrir outro e ele funcionará.
David LeBauer
Eu sei direito? :) É um pouco complicado, mas geralmente funciona para mim.
RolandiXor

Respostas:

14

Uma boa maneira geral de diagnosticar trava misteriosa:

  1. abra um terminal (nother) e use ps axo pid,wchan:32,cmdpara encontrar o outro ID do processo
  2. observe a wchancoluna, que deve informar se está presa no kernel
  3. executar sudo strace -p PIDinserindo o pid desse processo; cole isso em um relatório ou pergunta de bug

Se houver algo além de apenas um traço na coluna wchan, o processo está no kernel fazendo alguma coisa. Alguns valores típicos:

  • futex_wait_queue_me - aguardando um futex por outro encadeamento no mesmo processo
  • poll_schedule_timeout - aguardando comunicação em rede ou entre processos, ou apenas dormindo por um tempo
  • pipe_wait - ler / escrever um cachimbo

Existem milhares de possibilidades, então não posso listá-las todas. Consulte O que é o "Canal em espera" de um processo? para mais.

poolie
fonte
Muito útil para rastreamento de erros de uso geral. Você pode atualizar sua resposta com uma descrição extensa? Que mensagem na coluna wchan indica um programa que está preso no kernel?
precisa
Obrigado, Salih. Talvez devêssemos ter outra pergunta sobre como diagnosticar travamentos em geral?
Pool #
Se as pessoas estiverem curiosas sobre outros valores wchan, adicione um comentário.
poolieby
Qualquer wchanmeio que o processo esteja aguardando no kernel. Se ele permanecer lá por um longo período de tempo e por nenhuma boa razão, como ouvir a rede io, ficará bloqueado. ;)
poolie
25

Você pressionou Ctrl + S por acaso? É a tecla de pausa do terminal que interrompe toda a saída até que você pressione Ctrl-Q para continuar.

Marius Gedminas
fonte