wget
종료할 수 없는 프로세스 가 있습니다 . 이 질문은 다음과 유사합니다.예전에 어떤분이 물어보셨는데, 하지만 여기 D
열에 있는 항목 STAT
은uninterruptible sleep (usually IO)
, 다른 질문에서는 프로세스가 상태에 있습니다 R
.
$ ps -axuf | grep `id -un`
USER PID %CPU %MEM VSZ RSS TTY STAT START TIME COMMAND
[...]
biogeek 2833351 0.0 0.0 0 0 ? D Apr12 0:03 [wget]
[...]
죽이려고 하면 출력이 생성되지 않습니다.
$ kill -9 2833351
ps -axuf
다시 실행 해도 wget
프로세스가 그대로 남아 있습니다.
이 문제를 일으키는 소프트웨어/하드웨어 결함을 어떻게 식별할 수 있습니까?
답변1
프로세스가 SIGKILL을 수신했으므로 현재 시스템 호출에서 반환되면 종료됩니다. 또한 커널은 프로세스가 시스템 호출을 중단해도 안전한 상태에 진입하자마자 프로세스가 복귀할 수 있도록 허용합니다. 커널 내부에서 비정상적인 일이 발생하면 프로세스는 D
오랫동안 중단 없이 절전(상태) 상태로 유지됩니다. 종료할 수 없는 프로세스에 대한 자세한 내용은 다음을 참조하세요."kill -9"가 작동하지 않으면 어떻게 되나요?
프로세스가 수행 중인 작업을 조사하는 한 가지 방법은 다음과 같은 진단 도구를 실행하는 것입니다.스트레스또는길또는 기타 유사한 도구(유닉스 취향에 따라). 이를 통해 프로세스가 어떤 시스템 호출을 수행하고 있으며 어떤 매개변수를 사용하는지 알 수 있습니다. 예를 들어 다음과 같은 내용이 표시될 수 있습니다.
strace -p2833351
strace: Process 2833351 attached
read(3,
이는 프로세스가 현재 파일 설명자 3에서 읽고 있음을 알려줍니다. 다음 단계는 with lsof -p2833351
또는 with 와 같은 파일 설명자에 무엇이 있는지 알아내는 것입니다 ls -l /proc/2833351/fd/3
. 이는 응답하지 않는 NFS 서버나 결함이 있는 디스크 컨트롤러로 인해 파일 시스템 드라이버가 예상치 못한 상태가 되는 등 문제의 원인을 가리킬 수 있습니다.
시스템 로그에서도 단서를 찾을 수 있습니다. 단서는 매우 다른 원인으로 인해 발생할 수 있고 매우 다른 징후를 가질 수 있는 비정상적인 행동이기 때문에 찾기 어려울 수 있습니다. 프로세스가 수행하는 작업과 직접 관련된 커널 버그, 일부 메모리를 손상시키는 관련 없는 커널 버그, 일부 메모리를 손상시키는 RAM 결함, 응답이 없어야 하는데 응답하지 않는 디스크 드라이브와 같은 결함 있는 주변 장치일 수 있습니다. 등.
답변2
주어진 상태에서 D
유일한 옵션은 차단 디스크 I/O 작업이 wget
완료될 때까지 기다리거나(성공 또는 실패) 다시 시작하거나 중단된 프로세스를 무시하는 것입니다. 프로세스 트리를 보고 wget
프로세스의 상위 또는 하위 프로세스(있는 경우)를 찾거나 프로세스의 /proc/PID/fd
데이터를 보고 열려 있는 파일 핸들을 확인하고 해당 파일 핸들을 열린 상태로 유지할 수 있는 모든 프로세스를 찾아낼 수 있습니다.
답변3
시도 해봐:sudo kill {pid_process}