다음은 리눅스 환경에서 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 = v * (i + 1);
printf("c = %d ", v);
} else if (pid == 0) {
for (i = 0; i < n; i++) v = 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)에 따라 실행 경로가 달라집니다. 문제의 코드에서 v=1, n=5일 때 각 프로세스의 동작은 다음과 같습니다. 1. 자식 프로세스 (pid == 0): v에 1부터 5까지의 곱을 누적합니다. 1 × 2 × 3 × 4 × 5 = 120 이므로 b = 120이 출력됩니다. 2. 부모 프로세스 (pid > 0): wait(NULL)로 자식 종료를 기다린 후, v에 1을 5번 더합니다. 1 + 1 + 1 + 1 + 1 + 1 = 6 이므로 a = 6이 출력됩니다. 따라서 최종 출력 결과는 b = 120, a = 6입니다.
콘텐츠 정보
- 자료 유형
- 공개 기출
- 검수 상태
- 자동 검사 완료
- 해설 작성·검수
- 정처LAB 자동 검사
- 최종 검수
- 자동 검사 완료