아직 살아 있고, -9/SIGKILL을 죽인 후에도 여전히 살아 있음 [중복]

아직 살아 있고, -9/SIGKILL을 죽인 후에도 여전히 살아 있음 [중복]

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, 장치 액세스/... 실패) 프로세스가 "디스크 좀비" 상태에서 거의 무한정 기다릴 수 있습니다.

문제의 드라이브가 강제로 마운트 해제되면 일반적으로 프로세스가 종료됩니다.

관련 정보