2009-04-20 65 views
31

버추얼 박스 프로세스가 있는데 (KILL/-ABORT) kill하려고 시도했지만 성공하지 못했습니다. 부모 PID는 1 (init)입니다.Linux에서 'uninterruptible'프로세스를 중지하는 방법은 무엇입니까?

top은 프로세스가 D이고 "uninterruptible sleep"이라고 기록되어 있습니다.

strace이 표시됩니다.

어떻게 제거하나요? vbox 커널 드라이버를 언로드하여 새로운 드라이버를로드하지 못하게합니다.

+0

더 나은 ServerFault? – dmckee

+0

내가 볼 수있는 한, 아직 온라인 상태가 아닌 것은 어느 것입니까? 어쨌든 팁 주셔서 감사합니다. –

답변

36

간단한 답 : 할 수 없습니다.

길게 대답 : uninterruptable sleep은 프로세스가 신호에 의해 깨우쳐지지 않는다는 것을 의미합니다. 그것은 기다리고있는 것에 의해서만 깨어납니다. 내가 그러한 상황에 처했을 때. CD-ROM으로, 나는 보통 디스크 일시 중지를 사용하고 재개함으로써 컴퓨터를 리셋한다.

15

D 상태는 기본적으로 프로세스가 디스크 I/O 또는 인터럽트 할 수없는 다른 블록 I/O을 기다리고 있음을 의미합니다. 때로는 커널이나 장치가 불량 블록 (특히 광학 디스크)을 열렬히 읽으 려한다는 의미입니다. 때로는 뭔가 다른 것을 의미하기도합니다.

프로세스가 D 상태에서 벗어날 때까지 프로세스를 종료 할 수 없습니다. 그것이 무엇을 기다리고 있는지 확인하고 해결하십시오. 쉬운 방법은 재부팅하는 것입니다. 문제의 디스크를 제거하는 것이 도움이되지만 때로는 위험 할 수 있습니다. 수행 할 작업을 모르는 경우 수정 불가능한 치명적인 하드웨어 오류입니다 (읽기 : 연기가 나옴).

3

은 최근 원격 서버에 D 상태에있는 프로세스가 발생하고 하드 재부팅 또는 전원 사이클이 과정을 제거 할 필요가 있음을 명확히하고 싶습니다.

다른 모든 옵션을 모두 사용할 때까지 소프트 재부팅을 시도하지 마십시오. 예를 들어 프로세스가 걸려있는 리소스를 해제 할 수 있습니다. 소프트 재부팅은 부분적으로 종료 된 시스템을 제공 할 수 있으며 ssh에 더 이상 응답하지 않지만 중단되지 않는 프로세스를 종료하려고 시도하기 때문에 재부팅하지 않습니다.

11

중단되지 않는 프로세스를 강제 종료하면 성공하지 못합니다. 프로세스가 실제로 신호를 수신 할 때까지 프로세스가 사라지지 않습니다. 따라서 신호 만 보내는 것만으로는 프로세스를 제거 할 수 없으며 중단 할 수없는 수면에서 깨어나야합니다.

타엘 포더는 guide to analyse D state processes을 작성했습니다. 이 상태는 불완전한 I/O로 인해 발생하는 것이 일반적입니다. 네트워크 장애. slm이 네트워크 입출력을 unjam하는 방법과 문제 자체에 대해 very useful pointers on superuser 게시했습니다.

개인적으로 VirtualBox에서 Windows를 다루거나 와인을 사용하는 경우에도 CDROM I/O가 완료되지 않아서이 문제가 자주 발생합니다. ATA devices can be reset, 아마도 프로세스를 방해 할 것입니다.

다른 사람들이 말했듯이
echo 1 > /sys/block/sr0/delete 
echo 1 > /sys/block/sr1/delete 
echo "- - -" > /sys/class/scsi_host/host7/scan 
1

가, 무정전 프로세스가 커널 함수에 갇혀있는 과정입니다 : 예를 들어, 나는 프로세스가 차단을 unjamming, 내 광학 드라이브 모두를 다시 다음 약간의 스크립트를 사용하고 있습니다 인터럽트 할 수 없으며 (대개 일부 I/O 작업을 기다리고 있음). 자세한 설명은 this answer을 참조하십시오.

kill -9 {process_id} 
sync 
echo 3 | sudo tee /proc/sys/vm/drop_caches 

이 시스템 안정성에 영향을 미칠 것 같지 않았다, 그러나 나는 시스템 프로그래머 아니에요하지 :

는 별도로 컴퓨터를 다시 시작에서, 나는 flushing linux VM caches하여 D 상태 중 일부 프로세스를 데려 성공을 거두었 이것이 의도하지 않은 결과를 초래할 수 있습니다.


편집 :

kernel docs에 따르면, drop_caches는 개발 환경에서 합리적으로 안전한 것으로 나타납니다.

이에 쓰기

커널 깨끗한 캐시뿐만 아니라 dentries와 아이 노드와 같은 의 교정 슬래브 물건을 떨어 뜨리하게됩니다 drop_caches하지. 떨어 뜨린 후에는 메모리가 비어있게됩니다. 무료 페이지 캐시로

:

echo 3 > /proc/sys/vm/drop_caches 

이는 다음과 같습니다

echo 2 > /proc/sys/vm/drop_caches 

무료 슬래브 객체와 페이지 캐시받는 사람 :

echo 1 > /proc/sys/vm/drop_caches 

는 재생 가능한 슬래브 객체를 해제하려면 (dentries와 아이 노드를 포함한다) 비파괴적인 작업이며 더러운 객체를 해제하지 않습니다. 이 작업으로 해제되는 개체의 수를 늘리려면/sync/sys/vm/drop_caches에 쓰기 전에 `sync '를 실행할 수 있습니다. 이렇게하면 시스템의 더티 개체 수가 최소화되고 이 떨어지는 후보가 더 많이 생성됩니다.

이 파일은 이러한 개체는 자동으로 있습니다 메모리가 다른 시스템에 필요할 때 커널 회수 다양한 커널 캐시 (아이 노드, dentries, 페이지 캐시 등)의 성장을 제어하기위한 수단이 아니다.

이 파일을 사용하면 성능에 문제가 발생할 수 있습니다. 캐시 된 개체를 버리므로 특히 많은 양의 사용량이있는 경우 삭제 된 개체를 다시 만들려면 상당한 양의 I/O 및 CPU가 필요할 수 있습니다. 따라서 외부에서 테스트 또는 디버깅 환경을 사용하지 않는 것이 좋습니다. 이 파일이 사용 때

당신은 당신의 커널 로그에 정보 메시지를 볼 수 있습니다

cat (1234): drop_caches: 3 

이는 정보 제공 용으로 만 사용됩니다. 그들은 당신의 시스템에 무엇이든 잘못되었다는 것을 의미하지는 않습니다. . 이를 사용하지 않으려면 drop_caches에 4 (비트 3)를 반향하십시오.

관련 문제