다음 이전 차례

6. 리눅스 내부 구조 FAQ

6.1 좀비(zombie) 프로세스란 무엇입니까?

자식 프로세스(child process)가 종료하면 부모 프로세스(parent process)는 그것을 다시 거두어 들이게 되어 있습니다. 즉 자식 프로세스가 종료하면 그 상태를 리턴받아 체크한다는 뜻이죠.

좀비 프로세스는 부모 프로세스로가 거두어 들이지 못한 프로세스들입니다. 이것들은 메모리를 차지하지 않고 디스크 용량, IO, CPU 시간 또한 전혀 차지하지 않고 다만 이 프로세스들은 프로세스 테이블의 용량만을 차지하고 있습니다. 보통 이것은 별 문제가 되지는 않습니다만 프로세스를 거의 한계 용량에 다다를 정도로 많이 실행시키는 부하가 많이 걸리는 시스템의 경우, 혹은 자식 프로세스를 많이 만들어 내기만 하고 거의 거두어들이지 않는 그런 상황일 경우 문제가 될 수 있습니다.

이것은 대부분 소프트웨어의 버그이며 시스템 크래쉬의 원인이 될 수도 있습니다. 부모 프로세스가 종료될 때 아직 거두어들이지 못한 자식 프로세스들은 모두 init 프로세스에 의해 거두어들여지게 되는데 이 과정은 시스템 로드가 많이 걸려있는 상황에선 오랜 시간이 걸릴 수도 있습니다. 많은 좀비 프로세스들이 매우 나쁜 영향을 미칠 수 있습니다. 왜냐하면 그 프로세스들은 여러분이 그 프로세스를 깨끗이 끝내기 위해서 실행해야 할 명령을 제대로 실행되지 못하게 할 수도 있기 때문입니다. 만약 그런 일이 생긴다면 셧다운만이 유일한 해결책입니다.

또는 ulimit을 이용해서 위험한 작업을 수행할 때에는 미리 한계를 지워 줄 수도 있습니다.

6.2 커널을 새로 컴파일하고 부팅했더니 "kernel panic - no root device" 라는 메시지가 뜹니다. 뭐가 잘못된 건가요?

커널 컴파일시에 루트 디바이스를 제대로 설정했는지 확인하세요. 여러분이 ramdisk를 사용하지 않는다면 이 디바이스 드라이버는 모듈로 설정될 수가 없습니다.(이 경우에 모듈은 아직 마운트되지 않은 루트 디바이스에 위치하고 있기 때문입니다.)

rdev명령으로 루트 디바이스를 지정해줄 수도 있습니다.

여러분의 예전 커널로도 부팅할 수 있도록 lilo.conf 에 설정해 두고 문제가 생길 경우 예전 커널로 부팅하도록 해두기를 강력히 권장합니다.


다음 이전 차례