![아직 살아 있고, -9/SIGKILL을 죽인 후에도 여전히 살아 있음 [중복]](https://linux55.com/image/67959/%EC%95%84%EC%A7%81%20%EC%82%B4%EC%95%84%20%EC%9E%88%EA%B3%A0%2C%20-9%2FSIGKILL%EC%9D%84%20%EC%A3%BD%EC%9D%B8%20%ED%9B%84%EC%97%90%EB%8F%84%20%EC%97%AC%EC%A0%84%ED%9E%88%20%EC%82%B4%EC%95%84%20%EC%9E%88%EC%9D%8C%20%5B%EC%A4%91%EB%B3%B5%5D.png)
apache2 프로세스가 내 서버에 멈춰 다른 서비스에 문제를 일으키고 있습니다. (원래 질문: USB 하드웨어 연결 해제 후 Kerneloops)
root@server:~# ps aux | grep apache2 | grep -v grep
www-data 12917 0.0 0.1 412148 16156 ? D Jun27 0:00 /usr/sbin/apache2 -k start
당연히 그랬 kill
습니다. 아직 살아있습니다. 그래서 나는 kill -9
그것을 했다. 그것은 여전히 "살아있다".
이제 serverfault/unix&linux에 적합한 질문이 있습니다. 포트 443을 복원하는 방법이 있습니까?아니요분명한 일을 하십시오: 재부팅하시겠습니까? iptables가 설치되었습니다.
고쳐 쓰다:저 할 수 있어요아니요문제를 해결하기 위해 재부팅할 필요가 없습니다. 추가(가능한) 하드웨어 결함이 없는 경우 여기에 설명된 일반적인 접근 방식과 "반복"(어떤 드라이브를 사용 lsof
하거나 /proc/$PID/fd
확인하고 해당 드라이브를 제거)이 작동할 가능성이 높습니다.
답변1
"D" 상태는 처치 불가능입니다. 프로세스는 사용자 공간에 있을 때만 종료될 수 있습니다(해당 코드는 무엇이든 수행 중입니다). 시스템 호출이 호출되면(가장 일반적인 문제는 입력 및 출력 작업임) 시스템 호출이 반환될 때까지 커널이 인계받습니다. 커널 모드에서는 프로세스를 종료할 수 없습니다. 커널 코드를 중단하는 것은 전체 시스템에 위험하며, 커널 모드의 프로세스가 제어 없이 신호를 수신해야 하는지에 대한 철학적인 질문도 있습니다.
따라서 커널 모드를 종료하는 유일한 방법은 코드 자체가 시간 초과/중단되는 것입니다. 네트워크 드라이브의 I/O 작업은 과도하게 보호되는 경우가 많으며 데이터 손실을 피하기 위해 포기하고 싶지 않습니다. 네트워크 드라이브에 액세스할 수 없게 되면(또는 다른 I/O, 장치 액세스/... 실패) 프로세스가 "디스크 좀비" 상태에서 거의 무한정 기다릴 수 있습니다.
문제의 드라이브가 강제로 마운트 해제되면 일반적으로 프로세스가 종료됩니다.