O que impede uma reinicialização?

2

No Linux, como posso acompanhar o que impede a reinicialização do sistema após a emissão via sudo reboot ?

Eu sempre achei que isso causava a troca do nível de execução e, no final, a reinicialização, mas agora eu estava perplexo quando várias vezes as máquinas não tinham sido reiniciadas após serem informadas.

    
por 0xC0000022L 23.03.2015 / 19:30

1 resposta

1

Eu corri para este problema uma vez quando o meu sistema estava executando processos ininterruptos. Nós entramos em uma situação muito desagradável, onde os processos do Apache aparentemente estavam esperando por algo do disco, e não poderia ser morto .

Até onde eu sei, ao desligar, o Linux envia SIGTERM s para seus processos, e um SIGKILL alguns segundos depois para aqueles que ousam desobedecer. No entanto, o próprio kernel protegerá esses processos se eles estiverem em estado ininterrupto: isso ajuda a evitar a perda de dados quando a chamada do sistema for interrompida envolve uma operação de E / S. No momento, não consigo pensar em mais nada capaz de descartar * a SIGKILL , para que outros elementos de resposta possam ser trazidos até aqui.

* esta é uma maneira bastante simplificada (se não errônea) de vê-la, e não leva em consideração a assincronia do sinal. Veja o comentário de Gilles para mais detalhes sobre este ponto.

No entanto, quando se trata de processos ininterruptos ...

How to kill an uninterruptible process without rebooting: somehow make the system call terminate. Frequently the most effective manner to do this without hitting the power switch is to pull the power cord. You can also become a kernel hacker and make the driver use TASK_KILLABLE, as explained in the LWN article.

Você pode obter uma lista de todos os processos ininterruptos em execução com ...

$ ps -eo 'state,pid,args' | awk '$1 == "D" {print;}'
$ ps -eo 'state,pid,args' | grep -E '^D'
$ ps -eo 'state,pid,args' | egrep '^D'
...
    
por 23.03.2015 / 20:00

Tags