답변1
시스템 호출은 항상 프로세스에 의해 커널에 수행됩니다.
따라서 구체적인 질문에 답하십시오.
- 상위 프로세스는
wait
커널을 호출합니다. - 하위 프로세스는
exit
커널을 호출합니다.
다음은 무슨 일이 일어나는지에 대한 단순화된 보기입니다.
프로세스가 호출되면 exit
커널은 return code
내부 프로세스 테이블에 인수( )를 저장하고 프로세스와 관련된 다른 모든 리소스(할당된 메모리, 열린 파일 설명자)를 파괴하고 프로세스를 로 표시합니다 zombie
.
상위 프로세스가 커널을 호출하면 커널은 해당 상태 wait
에 있는 하위 프로세스가 있는지 확인합니다 . zombie
그렇다면 return code
내부 프로세스 테이블에서 저장된 내용을 가져오고 테이블의 슬롯을 해제한 wait
다음 시스템 호출에서 반환하여 return code
하위 프로세스가 상태에 있지 않으면 zombie
커널은 하위 프로세스가 나타날 때까지 상위 프로세스를 차단합니다 . 전화 exit
.
임의의 프로세스에 의해 호출되면 exit
나머지 모든 하위 프로세스는 reparented
PID 1의 프로세스를 가리키므로 첫 번째 프로세스를 제외한 모든 프로세스에는 항상 상위 프로세스가 있습니다.
PID 1은 실행 중인 모든 것(네트워크 서비스, 직렬 회선의 수신기, GUI 로그인 프로그램)을 시작한 다음 wait
커널 프로세스 테이블이 좀비로 가득 차지 않도록 호출의 무한 루프에 들어갑니다.
하나 있다많은나는 일을 조금 단순화했으며 이제 프로세스 번호 1이 아닌 다른 것으로 프로세스를 재설정하도록 커널에 요청할 수 있습니다.대리 사신, 호출에는 다양한 형태가 있습니다 wait
(wait, waitid, waitpid, wait3, wait4(매뉴얼 페이지), 상호작용하다길시스템 호출, 할당된 리소스를 파괴한다는 것은 무엇을 의미합니까?