• 카테고리

    질문 & 답변
  • 세부 분야

    시스템

  • 해결 여부

    미해결

교수님 fork()함수에 대해 질문이 있습니다.

22.07.24 17:54 작성 조회수 453

0

fork() 함수를 호출하면 부모 process의 주소공간을 그대로 복사한다고 했는데, 자식 프로세스에서 pid = fork(); 명령을 수행하는것인지, 아니면 그 다음줄 부터 수행하는것인지 해깔립니다. 만약 자식프로세스가 pid = fork()를 수행하면 자식 프로세스가 또 자식프로세스를 만들어서 프로세스가 무한으로 증식되지 않을까 하는 걱정때문에 다음줄부터 수행하는것이 아닌가 생각됩니다. 그렇다면 자식 프로세스의 pid변수가 0을 같는 이유는 초기화가 안되어서 0이 되는것이라고 추측할수 있을텐데, 교수님이 중간에 자식프로세스는 pid= fork() 명령은 0을 리턴받는다고 말씀하셔서 해깔립니다.

답변 2

·

답변을 작성해보세요.

0

cjh70105님의 프로필

cjh70105

질문자

2022.07.26

답변 감사합니다! OS에서 자식 프로세스에겐 0을 리턴해주는것이었군요. 이해 됐습니다.

0

fork()를 호출하는 시점에서 process의 주소공간을 그대로 복사해 주는 역할은 O/S가 담당합니다. 그 후에 두 개의 process가 각각 PC(Program Counter)가 가리키는 주소의 명령을 실행하는 것이므로, fork() 함수 호출 이후의 인스트럭션을 실행하겠지요? 따라서 무한 증식은 걱정할 필요가 없을 것 같고요. 호출한 결과값을 리턴해 주는 것은 역시 fork() 시스템 호출이므로 fork()를 호출한 parent 프로세스에는 pid를, child 프로세스에는 0을 러턴해주는 것이니까 초기화와는 관련이 없다고 보셔도 될 것 같습니다.