Linux에서 명령을 실행한 후 시스템 재부팅을 방해하는 원인을 어떻게 추적할 수 있습니까 sudo reboot
?
나는 항상 이로 인해 런레벨 전환이 발생하고 결국 재부팅될 것이라고 생각했지만, 몇 번이나 재부팅하라는 지시를 받은 후에도 머신이 재부팅되지 않았기 때문에 지금은 당황스럽습니다.
답변1
내 시스템이 중단 없이 프로세스를 실행할 때 이런 문제가 발생한 적이 있습니다. Apache 프로세스가 디스크에서 무언가를 기다리고 있는 것처럼 보이는 매우 나쁜 상황이 있습니다.살해당할 수 없다.
내가 아는 한, Linux는 시스템을 종료할 때 SIGTERM
프로세스에 s를 보내고, SIGKILL
몇 초 후에 감히 불순종하려는 사람들에게 s를 보냅니다. 그러나 이러한 프로세스가 중단할 수 없는 상태인 경우 커널 자체가 이를 보호합니다. 이는 보류 중인 시스템 호출에 I/O 작업이 포함될 때 데이터 손실을 방지하는 데 도움이 됩니다. 이제 나는 정말로 할 수 있는 다른 일이 생각나지 않는다버리다* a SIGKILL
이므로 답변의 다른 요소를 여기에 가져올 수 있습니다.
* 이는 다소 단순화된(틀리지는 않지만) 보는 방식이며 신호 비동기성을 고려하지 않습니다. 이 점에 대한 자세한 내용은 Giles의 의견을 참조하십시오.
그러나 중단 없는 프로세스의 경우...
다시 시작하지 않고 중단할 수 없는 프로세스를 종료하는 방법: 어떤 방식으로든 시스템 호출을 종료합니다.일반적으로 전원 스위치를 누르지 않고 이 작업을 수행하는 가장 효율적인 방법은 전원 코드를 당기는 것입니다.커널 해커가 되어 드라이버가 TASK_KILLABLE을 사용하도록 할 수도 있습니다.LWN 기사.
다음 명령을 사용하여 중단 없이 실행 중인 모든 프로세스 목록을 얻을 수 있습니다.
$ ps -eo 'state,pid,args' | awk '$1 == "D" {print;}'
$ ps -eo 'state,pid,args' | grep -E '^D'
$ ps -eo 'state,pid,args' | egrep '^D'
...