인프런 커뮤니티 질문&답변

cjh70105님의 프로필 이미지
cjh70105

작성한 질문수

운영체제 공룡책 강의

04. 프로세스의 생성: Chapter 3. Processes (Part 2)

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

작성

·

673

0

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

답변 2

0

cjh70105님의 프로필 이미지
cjh70105
질문자

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

0

주니온님의 프로필 이미지
주니온
지식공유자

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

cjh70105님의 프로필 이미지
cjh70105

작성한 질문수

질문하기