다음은 리눅스 환경에서 fork() 시스템 호출을 이용하여 자식 프로세… | [9급 지방직 컴퓨터일반] 20년 1회차 기출문제 상세 페이지
1[9급 지방직 컴퓨터일반] 20년 1회차
다음은 리눅스 환경에서 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
b=120, a=6
2
c=16, b=120
3
b=120, c=16
4
a=6, c=16
해설
출력 결과는 b = 120 다음에 a = 6이 찍힌다.
fork()가 성공하면 자식 프로세스는 pid로 0을, 부모 프로세스는 자식의 PID(양수)를 받는다. 자식은 v = 1에 1, 2, 3, 4, 5를 차례로 곱해 120을 출력한다.
부모는 wait(NULL)로 자식이 끝날 때까지 기다린 뒤, 자신의 v = 1에 1을 다섯 번 더해 6을 출력한다. 두 프로세스는 변수를 따로 가지므로 자식의 계산이 부모의 v에 영향을 주지 않는다.
- c = 16과 b = 120을 함께 출력하는 경우는 없다. c를 출력하는 분기는 fork()가 실패해 음수를 반환할 때만 실행되므로, 생성 성공을 가정한 이 문항에서는 출력되지 않는다.
- b = 120 다음에 c = 16이 출력된다는 것도 같은 이유로 틀리다. 부모 프로세스는 pid가 양수이므로 a를 출력하는 분기로 간다.
- a = 6과 c = 16의 조합은 자식의 출력 b = 120이 빠지고, 실행되지 않는 c 분기가 들어가 있어 틀리다.
내용에 오류가 있거나 최신 법령·기준과 다른 부분이 보이면 알려주세요. 확인 후 반영하겠습니다.