좀비 프로세스 및 init 종료

좀비 프로세스 및 init 종료

wait어떤 이유에서인지 내가 작성한 프로그램에서 시스템 호출을 사용 하지 않기로 결정했다고 가정해 보겠습니다 .
이것은 내 기억이 그들의 아버지가 기다리지 않은 모든 완료된 과정으로 가득 차게 된다는 것을 의미합니까?

이것은 학문적 과제의 일부이며 두 답변 모두 제가 받아들일 수 있기 때문에 이 질문이 약간 혼란스럽다고 생각합니다.

이것이 제가 질문에 대답하는 방법입니다. 이것이 실제로 사실이라면 피드백을 원합니다.

상위 프로세스가 종료되기 전에 하위 프로세스를 기다리지 않으면 이러한 하위 프로세스는 init상위 프로세스에서 (함수 내부에서) 호출되는 프로세스에 연결됩니다. 어느 시점에서 init 프로세스는 메모리 제한과 관련하여 보유할 수 있는 것보다 더 많은 프로세스를 수용하게 됩니다. 그래서 전화하지 않으면 기억이 엉망이 됩니다.exitforget_original_parent()

wait

또한 이 경우 어떻게 되는지 명확히 하고 싶습니다. 머신이 종료되고 init 프로세스가 종료되었습니까? 이 경우 init의 모든 하위 프로세스는 어떻게 되나요?

답변1

어느 시점에서 init 프로세스는 메모리 제한과 관련하여 보유할 수 있는 것보다 더 많은 프로세스를 수용하게 됩니다.

정확히는 아닙니다. 좀비 프로세스(종료되었지만 아직 재활용되지 않은 프로세스)는 상위 프로세스의 메모리를 차지하지 않으며 커널의 프로세스 테이블에서 메모리를 차지합니다.

init"표준" 이라면 init어쨌든 좀비 프로세스를 수확하므로 아무런 문제가 없습니다.

하위 프로세스도 무시 하더라도 init여전히 해당 프로세스가 종료될 수 있는 제한에 도달하지 않습니다. 주요 제한 사항은 최대 프로세스 수입니다. 이에 도달하면 새 프로세스가 생성되지 않고 이로 인해 즉시 문제가 발생합니다(프로세스가 계속 생성됨). 시스템은 계속 실행되지만 로그인할 수 없으며 기존 쉘 등을 사용할 수 있습니다.

관련 정보