다음은 리눅스 환경에서 fork() 시스템 호출을 이용하여 자식 프로세스를 생성하는 C 프로그램이다. 출력 결과로 옳은 것은? (단, “pid = fork();” 문장의 수행 결과 자식 프로세스의 생성을 성공하였다고 가정한다)
#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#include <sys/types.h>
#include <errno.h>
#include <sys/wait.h>
int main(void) {
int i = 0, v = 1, n = 5;
pid_t pid;
pid = fork();
if (pid < 0) {
for (i = 0; i < n; i++) {
v += (i + 1);
}
printf("c = %d ", v);
} else if (pid == 0) {
for (i = 0; i < n; i++) {
v *= (i + 1);
}
printf("b = %d ", v);
} else {
wait(NULL);
for (i = 0; i < n; i++) {
v += 1;
}
printf("a = %d ", v);
}
return 0;
}정답 1번
fork()가 성공하면 자식에서는 pid가 0, 부모에서는 자식의 프로세스 ID(양수)가 된다. 두 프로세스는 각자의 변수 v를 따로 변경한다. 자식은 v = 1에 1부터 5까지를 곱하므로 b = 120을 출력한다. 부모는 wait(NULL)로 자식의 종료를 기다린 뒤, 자신의 v = 1에 1을 다섯 번 더하여 a = 6을 출력한다. 따라서 출력 순서는 b = 120, a = 6이다. pid < 0인 실패 분기는 문제의 가정상 실행되지 않는다. 이 분기의 계산은 1 + (1 + 2 + 3 + 4 + 5) = 16이지만, 실제 출력에는 c가 포함되지 않는다.
콘텐츠 정보
- 자료 유형
- 공개 기출
- 검수 상태
- 내용 검수 완료
- 해설 작성·검수
- 정처LAB 편집 기준
- 최종 검수
- 2026-09-14