Em 11-04-2011 12:00, ..:: S.e.r.i.a.L ::.. escreveu:
Bom dia amigos,
Tenho um servidor de banco de dados, aonde uma aplicação estava
rodando um select nesse banco.
Porém, essa aplicação foi fechada pelo próprio usuário e o select
continou a rodar (eu via o select rodando pelo comando ps ax).
Notei que esse processo, estava com a flag D, o que no man do ps, diz:
D, ininterrupta sono ou Uninterruptible sleep (usually IO).
Não consegui entender o que realmente isso significa.
Pergunto isso, pois tenho algumas flags no kernel para matar conexões
de keep_alive, e eles funcionam perfeitamente bem, porem com a flag D,
não funcionam, alias foi a primeira vez que me deparei com essa flag.
Alguém poderia me explicar de um maneira mais clara o que aconteceu e
o que acontece qdo a flag D entra em operação?
Obrigado a todos.
Olá!
Processos com status 'D' (sono profundo), são processos que
estão esperando respostas de drivers ou kernel, geralmente de escrita em
compartilhamento de rede, algumas vezes em HD ou memória flash e raras
vezes em sockets ou pipes (comunicação entre processos). Nesse caso, o
processo dorme esperando essa resposta e se for interrompido pode causar
alguma falha crítica ou corromper arquivos, por isso nenhum sinal que
não seja o que ele está esperando pode acordá-lo, nem SIGTERM ou SIGKILL
(kill -9).
Caso mate o processo pai, ele irá para o estado de zombie, onde
o pai passar ser o processo 1 (init), o qual somente morre com o
desligamento do sistema, isto é, somente vai sumir quando
desligar/reiniciar.
O estado 'D' deveria existir, quando tudo estiver bem, por
frações de segundos, onde persistindo algo está errado e o processo não
foi programado para acordar depois de um tempo de espera (timeout).
[]'s
Junior Polegato