프로세스 수명주기에 대한 질문

프로세스 수명주기에 대한 질문

나는 나 자신에게 대해 물어볼 수 있었다wait(2)그리고_exit(2)프로세스 수명주기 동안 시스템 호출.

시스템 호출에 대한 내 질문 wait(2)은... 상위 프로세스가 이를 커널로 보내는가? 아니면 커널이 이를 상위 프로세스에 게시합니까? 또한 [ _exit(2)] 자식 프로세스에서 부모 프로세스로의 시스템 호출 문제인가요? 아니면 하위 프로세스가 _exit(2)커널에 [ ]를 발행합니까?

답을 찾기 위해 구글링도 하고 유튜브 영상도 보았지만... 구체적인 내용은 본 적이 없습니다.

답변1

시스템 호출은 항상 프로세스에 의해 커널에 수행됩니다.

따라서 구체적인 질문에 답하십시오.

  1. 상위 프로세스는 wait커널을 호출합니다.
  2. 하위 프로세스는 exit커널을 호출합니다.

다음은 무슨 일이 일어나는지에 대한 단순화된 보기입니다.

프로세스가 호출되면 exit커널은 return code내부 프로세스 테이블에 인수( )를 저장하고 프로세스와 관련된 다른 모든 리소스(할당된 메모리, 열린 파일 설명자)를 파괴하고 프로세스를 로 표시합니다 zombie.

상위 프로세스가 커널을 호출하면 커널은 해당 상태 wait에 있는 하위 프로세스가 있는지 확인합니다 . zombie그렇다면 return code내부 프로세스 테이블에서 저장된 내용을 가져오고 테이블의 슬롯을 해제한 wait다음 시스템 호출에서 반환하여 return code하위 프로세스가 상태에 있지 않으면 zombie커널은 하위 프로세스가 나타날 때까지 상위 프로세스를 차단합니다 . 전화 exit.

임의의 프로세스에 의해 호출되면 exit나머지 모든 하위 프로세스는 reparentedPID 1의 프로세스를 가리키므로 첫 번째 프로세스를 제외한 모든 프로세스에는 항상 상위 프로세스가 있습니다.

PID 1은 실행 중인 모든 것(네트워크 서비스, 직렬 회선의 수신기, GUI 로그인 프로그램)을 시작한 다음 wait커널 프로세스 테이블이 좀비로 가득 차지 않도록 호출의 무한 루프에 들어갑니다.

하나 있다많은나는 일을 조금 단순화했으며 이제 프로세스 번호 1이 아닌 다른 것으로 프로세스를 재설정하도록 커널에 요청할 수 있습니다.대리 사신, 호출에는 다양한 형태가 있습니다 wait(wait, waitid, waitpid, wait3, wait4(매뉴얼 페이지), 상호작용하다시스템 호출, 할당된 리소스를 파괴한다는 것은 무엇을 의미합니까?

관련 정보