avançar estratégia para interromper um aplicativo linux que tenha “pendurado” e feito o desktop X não responder

2

Quando um aplicativo (thunderbird) tem um problema, às vezes ele entra em um estado sem resposta onde bloqueou a interface do usuário, está bloqueando processos de login (em terminais tty) e também está impedindo o reinício da sessão X usando Ctrl-Alt -Backspace.

Normalmente em uma caixa * nix, enviar um sinal para o processo é suficiente para me devolver o acesso suficiente para recuperar o controle, no entanto, neste caso tudo foi borked, mesmo que fosse apenas uma única aplicação usando uma grande quantidade de RAM e trocar.

Usar o Ctrl-Alt-F1 me deu um console e um prompt de login, e eu poderia inserir o nome de usuário root, mas ele não retornaria o prompt de senha, então eu estava preso.

Ctrl-Alt-Backspace causou o reinício da sessão X, mas não me deu um prompt de login e um ciclo de energia foi necessário.

Existe alguma maneira de ligar um pressionamento de tecla a algum tipo de "função de interrupção" de baixo nível (quero dizer, no sentido geral) para suspender o incômodo processo interrompido para que eu possa ver o que ele está tentando fazer usando strace ?

Estou vagamente ciente de que alguns processos bloqueados não podem ser suspensos até que eles retornem, mas nesse caso não há indicação de que o processo de bloqueio esteja sendo impedido de acessar quaisquer recursos de ES, parece estar fazendo algo estúpido .

Eu estava originalmente pensando em algum script básico para ionizar e renegar qualquer processo associado ao thunderbird para a prioridade mais baixa, mas imagino que, se as coisas forem tão ruins quanto parecem, o novo processo não seria capaz de CPU.

Eu gostaria de usar a tecla Ctrl-Break para isso, já que ela não é usada para mais nada durante as sessões de desktop na minha máquina.

Basicamente, a área de trabalho está (lentamente) respondendo à chave e ao mouse, portanto, há algum escopo para fazer com que os comandos sejam executados para suspender o processo incorreto. Eu simplesmente não sei que tipo de comandos estão disponíveis nesse cenário.

    
por Tom H 23.11.2011 / 20:29

3 respostas

3

Meu palpite é que o Thunderbird está consumindo muita memória. Se você conseguir um shell / console, simplesmente mate o processo. Normalmente, o Thunderbird será interrompido se você estiver reconstruindo o índice de pesquisa ou carregando milhares de emails no cache.

Você também pode definir a prioridade no linux oom killer em /proc , para que a primeira coisa seja SIGTERM.

vamos primeiro encontrar o processo do thunderbird. (use o que você preferir: pgrep , ps -ef|grep … , etc)

bash$ pidof thunderbird
1439

Agora, para interromper temporariamente o processo, basta interromper o processo:)

bash$ kill -s SIGSTOP 1439
bash$ strace ... 

Uma vez que você está feliz, você pode continuar o processo, com o sinal "continue". :)

bash$ kill -s SIGCONT 1439

Além disso, se for um tópico que você pode analisar, use tkill ou tgkill , mas talvez seja necessário instalá-lo primeiro.

    
por 23.11.2011 / 22:42
1

Eu não sei se vai responder em todos os detalhes da sua pergunta, mas algumas dicas vão te dar.

quando eu estou tentando saber o que é a causa raiz de algum programa se comportar mal é executá-lo a partir do console (quero dizer que você executar o programa GUI, mas você iniciá-lo a partir do console) para que você tenha alguma indicação sobre o que está fazendo, daí você pode ter uma pista sobre como resolver o problema com o thunderbird.

para ser mais específico para a sua pergunta, o que eu estou fazendo quando tenho uma situação como você menciona, eu ssh na máquina (sim eu consigo logar, embora eu não consiga nem mesmo tty1 com Alt + F4), então com top , ou com ps ax | grep thunderbird mata o programa e a área de trabalho (incluindo X e todas as outras janelas que estavam abertas) volta a funcionar.

Eu sei que não é exatamente nos pontos certos que você desenhou em sua pergunta, mas eu dou o que eu tenho.

    
por 23.11.2011 / 22:39
0

Eu suspeito que há alguns problemas com sua análise. Você realmente ainda está executando uma CPU de um único núcleo? Eu suspeito que algo mais fundamental do que um processo de fuga está ocorrendo (em uma caixa de núcleo único), embora seja possível que algo esteja fazendo com que o sistema rode muito lentamente.

É claro que você não pode ter acesso para executar nenhum diagnóstico depois que o problema for resolvido.

Eu gostaria de desabilitar o ACPI / APM (no caso de haver alguma contribuição da escala do relógio) e executar procmon para tentar capturar o evento.

Você pode considerar o uso do watchdog no modo monitoração (-q) para acionar diagnósticos.

    
por 24.11.2011 / 14:04