Como matar uma tarefa que não pode ser morta (ininterrupta?)

3

Eu tenho uma tarefa em execução que bloqueia o pm-hibernate (no Linux 4.0.7-2). Quando tento o pm-hibernate, há uma mensagem de erro "O congelamento de tarefas falhou após 20.002 segundos (1 tarefas se recusando a congelar, wq_busy = 0):" e a tarefa é mostrada.

O processo é um morto que foi morto horas antes. Por que a raiz pode não apenas removê-lo do kernel? Estou me sentindo como no Windows!

Eu vi perguntas relacionadas como Como matar um processo que não pode ser morto sem reiniciar? mas não parece haver respostas satisfatórias.

Algumas informações ( 31207 é o pid):

# cat /proc/31207/syscall
11 0x7fe482a47000 0x25fce 0x7fe481d4eb78 0x1 0x7fe482a6e700 0x25f2d30     0x7ffca8d8c278 0x7fe481a95ae7
# ps -l -p 31207
F S   UID   PID  PPID  C PRI  NI ADDR SZ WCHAN  TTY          TIME CMD
0 D  1001 31207     1  0  80   0 -  5035 lock_e pts/9    00:00:00 a.out
# ps -lnp 31207
F S   UID   PID  PPID  C PRI  NI ADDR SZ  WCHAN TTY        TIME CMD
0 D  1001 31207     1  0  80   0 -  5035 ffffff pts/9      0:00 /tmp/a.out
# ps opid,wchan:42,cmd -p 31207
 PID WCHAN                                      CMD
31207 lock_extent_bits                           /tmp/a.out

Então, por que não posso simplesmente pará-lo? Suspender seria suficiente!

Não estou usando nenhuma rede FS e a tarefa era simples, acessando a rede. Se você puder ler isso, a rede ainda está ativa.

    
por Ned64 09.07.2015 / 21:30

1 resposta

5

Os processos no estado D (ininterrupto sleep) não podem ser eliminados enquanto estão nesse estado. O NFS era notório por isso, mas existem outras maneiras de travar um processo. Drivers de dispositivo quebrados que não retornam controle para o processo de chamada também podem causar esse comportamento. Seria necessário redefinir o driver, mas, em geral, não há como fazer isso. Eu odeio dizer isso: não há nada além de reiniciar para sair disso.

    
por 10.07.2015 / 00:59

Tags