EDIT: Eu originalmente cortar e colei uma pergunta que eu perguntei anteriormente
stackoverflow que foi fechado:
link
Eu já enfrentei o mesmo problema com um processo diferente e
agora editei minha pergunta para esse processo (o novo pid é 23758).
O processo parece estar na espera do disco:
> ps -wwwlp 23758
F S UID PID PPID C PRI NI ADDR SZ WCHAN TTY TIME CMD
0 D 500 23758 1 0 80 0 - 3651 lookup ? 00:00:00 bc-xwd.pl
"lsof -p 23758" retorna muitas linhas, mas as "interessantes" parecem ser:
bc-xwd.pl 23758 barrycar 0r FIFO 0,6 0t0 82208417 pipe
bc-xwd.pl 23758 barrycar 1w CHR 1,3 0t0 620 /dev/null
bc-xwd.pl 23758 barrycar 2w CHR 1,3 0t0 620 /dev/null
Embora "lsof -p" não mostre, bc-xwd.pl acessa / mnt / sshfs, um
Sistema de arquivos montado em loop de somente leitura HFS que tem uma tendência a travar
de vez em quando. Quando ele falha, eu recebo várias mensagens do console
que se parece com isso:
Message from syslogd@domain at Oct 24 05:54:32 ...
kernel: [<c0408474>] ? sysenter_do_call+0x12/0x28
Message from syslogd@domain at Oct 24 05:54:32 ...
kernel:Code: 8b 44 10 2c e8 84 10 de ff 8b 83 a0 00 00 00 0f b7 50 04 39 d6 7c e5 8b 93 a0 00 00 00 8b 42 18 85 c0 74 16 c7 42 18 00 00 00 00 <8b> 30 e8 bf fc ff ff 85 f6 74 04 89 f0 eb f1 8b 83 a4 00 00 00
Message from syslogd@domain at Oct 24 05:54:32 ...
kernel:EIP: [<c06af6b0>] skb_release_data+0x78/0x96 SS:ESP 0068:df021da8
(e vários mais).
Geralmente , os processos que o acessam simplesmente morrem, mas
alguns penduram como acima. Remontar o sistema de arquivos não ajuda.
Eu fiz isso (no bash) para atingi-lo com todos os sinais de kill possíveis:
perl -le 'for (@ARGV) {print "kill -$_ 23758"}' 'kill -l' | sh
mas ainda vive. Eu fiz a mesma coisa tcsh (substituindo "| sh" por
"| tcsh") com a mesma falta de resultados.
Eu também observei todos os arquivos em / proc / 23758 fazendo isso:
find /proc/23758 -type f | perl -nle 'print "$_:";system("cat $_");'
mas houve muitos resultados e não sei quantos foram
realmente importante. Se houver algum arquivo específico, seria útil
para postar, por favor, deixe-me saber e eu vou.
Por que isso é importante: minha CPU parece ser muito mais lenta, já que
processo começou a ficar suspenso (já faz alguns dias). Última vez
isso aconteceu, eu reiniciei, e tudo estava bem, mas eu estou esperando
evitar uma reinicialização desta vez.
Pergunta original abaixo:
Eu tenho vários processos (alguns canalizados uns com os outros) que até matam -9 não matam. Quando eu corro lsof -p em um deles, vejo várias linhas, uma das quais diz:
COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME
convert 9859 barrycar 0r FIFO 0,6 0t0 74488298 pipe
Tenho certeza de que este é o problema: os processos abriram pipes para se comunicarem entre si em um dispositivo que travou (o qual eu mais tarde remontei apenas com um arquivo / dev / device diferente).
Eu acho que se eu puder destruir o pipe com o inode 74488298, os dois processos ligados por este pipe (que obviamente tem outro número de inode para o segundo processo) morrerão.
Então, como posso fazer isso e / ou qual sinal de kill posso enviar para o processo que diz "seus canos estão quebrados, desistam e morram"? Eu tentei POLL, TRAP, HUP, (e, claro, matar -KILL aka kill -9) sem sucesso.