O Firefox está suspenso. Normalmente eu mato com -1, -9 ou -15, mas dessa vez, quero descobrir o porquê. Eu tenho uma hora ou mais a perder com isso, e buscar a educação acima de realmente resolver o problema.
Objetivo: obter essa instância do firefox em execução novamente, sem eliminá-lo e reiniciá-lo.
O Firefox estava funcionando bem, apesar de lento devido ao uso pesado de memória. Eu tinha o número de abas de Avogadro abertas em cerca de mil janelas do navegador. (Algum exagero pode estar envolvido.) Eu estava fechando algumas abas, quando em um ponto a janela do navegador parou de repintar o conteúdo. Arrastar janelas não relacionadas sobre causas remanescentes dessas janelas para permanecerem ali para sempre. Qualquer que seja o equivalente X11 de WM_PAINT, ele está sendo ignorado. As tentativas de abrir um novo Firefox clicando em URLs nos e-mails exibem apenas uma mensagem de erro dizendo "O Firefox já está em execução, mas não está respondendo".
O Firefox tem o ID do processo 9297.
O processo 526 é o gerenciador de janelas.
= > ps axl | grep 9297
0 1000 9297 526 13 -7 6080428 4465776 poll_s S<sl ? 11602:12 firefox
0 1000 20000 9297 20 0 0 0 exit Z ? 216:31 [plugin-containe] <defunct>
(Eu estava jogando com o renice para ver se a prioridade tinha algo a ver com o firefox pendurado. Não. Mas deixei-o em -7.)
= > ps -efL | grep 9297
darenw 9297 526 9297 57 61 Sep22 ? 6-23:10:34 firefox
darenw 9297 526 9300 0 61 Sep22 ? 00:00:00 firefox
darenw 9297 526 9301 0 61 Sep22 ? 00:00:00 firefox
... dozens like these ...
darenw 9297 526 7607 0 61 16:17 ? 00:00:00 firefox
darenw 9297 526 7657 0 61 16:17 ? 00:00:00 firefox
darenw 20000 9297 20000 1 1 Sep23 ? 03:34:36 [plugin-containe] <defunct>
= > ps axl | grep 20000
0 1000 20000 9297 20 0 0 0 exit Z ? 216:31 [plugin-containe] <defunct>
Este se atrasa porque o segmento principal 9297 ainda não terminou esse segmento, obtendo seu código de saída. Pelo menos, essa é minha compreensão de processos "defuntos". Não sei como investigar mais detalhadamente esse detalhe, ou como determinar se é por isso que o Firefox está suspenso.
= > strace -f -p 9297
...
[pid 13945] <... select resumed> ) = 0 (Timeout)
[pid 13945] select(0, NULL, NULL, NULL, {0, 10000}) = 0 (Timeout)
[pid 13945] select(0, NULL, NULL, NULL, {0, 10000} <unfinished ...>
[pid 9356] <... futex resumed> ) = -1 ETIMEDOUT (Connection timed out)
[pid 9356] futex(0x7f28b7df8be8, FUTEX_WAKE_PRIVATE, 1) = 0
[pid 9356] futex(0x7f28b7df8c14, FUTEX_WAIT_BITSET_PRIVATE, 1, {6910910, 806929252}, ffffffff <unfinished ...>
...
As mesmas seis linhas se repetem enquanto eu deixo o strace rodar, embora às vezes existam apenas duas linhas em vez de três para o PID. Eu não vi nenhuma menção a outros pids, além desses dois.
= > ps axl | grep 13945
4 0 4985 23253 20 0 11064 2236 pipe_w S+ pts/19 0:00 grep 13945
= > ps axl | grep 9356
4 0 5111 23253 20 0 11064 2232 pipe_w S+ pts/19 0:00 grep 9356
Então, quais são esses dois processos, 13945 e 9356?
= > ps-eL | grep 9297 | grep 9356
9297 9356? 02:02:50 SoftwareVsyncTh
9297 13945? 01:04:15 firefox
Então, o que é SoftwareVsyncTh? O Google não ajuda muito. Esse símbolo aparece na saída 'ps' e em outra listagem de processos e encadeamentos, mas não em qualquer código-fonte on-line ou em fóruns de Q & A que o mencionem de uma maneira específica. Por tudo que eu sei, e esses dois processos, não tem nada a ver com o Firefox estar preso e não pintar suas vitrines.
Que comandos adicionais eu poderia usar para descobrir mais pistas? Existe uma maneira de obter uma lista de janelas e guias com suas urls, e fechar uma (a URL mais suspeita / com aparência de spam) de uma linha de comando shell?
Bem, o que quer que esteja acontecendo com eles, descubro que posso obter algumas informações sobre o tópico principal:
= > strace -p 9297
--- SIGVTALRM {si_signo=SIGVTALRM, si_code=SI_TKILL, si_pid=9297, si_uid=1000} ---
rt_sigreturn({mask=[]}) = -1 EINTR (Interrupted system call)
poll([{fd=23, events=POLLPRI|POLLOUT}], 1, 5000) = ? ERESTART_RESTARTBLOCK (Interrupted by signal)
que se repete sem alterações.
Eu não sou um gênio em threads, processos, exclusões mútuas e futexes e tudo mais, mas talvez resolvendo esse mistério, eu me tornarei um! Eu só preciso saber mais comandos para investigar mais, e entender o que exatamente está acontecendo nos resultados strace que podem estar relacionados com o enforcamento do Firefox.
Existe algum comando que eu possa tentar para colocar o Firefox de volta em ação?
Especificações do sistema: Intel quad core, 16GB, o Arch Linux foi atualizado há cerca de um mês ou dois atrás. Usando o icewm, vários espaços de trabalho e muitos editores de texto, visualizadores de PDF, navegadores e o que estiver aberto. Executando conky para mostrar RAM e uso de swap no canto superior esquerdo da tela. Eu geralmente estou prestes a entrar em swap.