본문 바로가기
혼자 공부하는 것들/운영체제

[운영체제] fork 실습 -1

by applepick 2020. 9. 27.
반응형

실습을 하기전에! 일단 fork가 무엇인지 알아보자.

 

fork란?

컴퓨팅, 특히 유닉스 운영 체제와 유닉스 계열 환경에서 포크(fork)란 프로세스가 자기 자신을 복제하는 동작이다. 이는 일반적으로 시스템 호출의 일종이며, 커널 안에서 구현된다. 포크는 유닉스 계열 운영 체제에서 프로세스를 만드는 주된 방식이다. 복제의 대상을 부모 프로세스라 하고 그 결과물을 자식 프로세스라 한다.


코드를 보자!

fork0.c 파일

#include <sys/types.h>
#include <unistd.h>
#include <sys/wait.h>
#include <stdio.h>
int main(void)
{
	int pid, status;
	pid = fork();    //(1)
	printf("pid = %d\n", pid); //(2)
	while ( 1 ) ; //(3)
}

1. 실행하면 몇 개의 프로세스가

수행되는가?

- 2개의 프로세스가 수행된다.

 

2. 각 프로세스의 결과(출력)는

무엇인가(각각)? 부모 프로세스의 출력은

무엇이고, 자식 프로세스의 출력은

무엇인가?

- pid = 15788 ->부모 

  pid = 0 ->자식

 

3. 부모 프로세스와 자식 프로세스의

번호(pid)는 각각 무엇인가?

- pid = 15788 ->부모 

  pid = 0 ->자식

 

4. 프로그램 문장 (1), (2), (3) 각각은 부모

프로세스와 자식 프로세스 중 어느 것에

실행되는가?

- 1)부모

  2)자식

  3)부모


fork1.c 파일

#include <sys/types.h>
#include <unistd.h>
#include <sys/wait.h>
#include <stdio.h>
int main(void)
{
	int pid, status;
	pid = fork();
	if (pid > 0) {
	/* parent process */	
	printf("PARENT: child=%d\n", pid); //(1)
	do { } while (1);  //(2)
	} else { /* pid == 0 */
	/* child process */
	printf("CHILD: child process is running.\n");  //(3)
	do { } while (1);   //(4)
	}
}

1.실행하면 몇 개의 프로세스가

수행되는가?

2개의 프로세스수행

 

2. 각 프로세스의 결과(출력)는

무엇인가(각각)? 부모 프로세스의 출력은

무엇이고, 자식 프로세스의 출력은

무엇인가?

PARENT: child=21725 ->부모

CHILD: child process is running. ->자식

 

3. 부모 프로세스와 자식 프로세스의

번호(pid)는 각각 무엇인가?

자식은 child=21725 부모는 모른다.

 

4. 프로그램 문장 (1), (2), (3), (4)에서 부모

프로세스에서 수행되는 것과 자식

프로세스에서 수행되는 것을 구분하여

적으시오.

1,2 ->부모

3.4 ->자식


fork2.c 파일

#include <sys/types.h>
#include <unistd.h>
#include <sys/wait.h>
#include <stdio.h>
int main(void)
{
	int pid, status;
	pid = fork( );
	if (pid > 0) {
	/* parent process */
	printf("PARENT: Child pid = %d\n", pid);  //(1)
	waitpid(pid, &status, 0) ;   //(2)
	printf("PARENT: Child exited (parent is still running)\n");   //(3)
	do {} while (1); //(4)
	} else {
	/* child process */
	printf("CHILD: Child process is running.\n");  //(5)
	do {} while (1);    //(6)
	}
}

1. 부모 프로세스와 자식 프로세스의

번호(pid)는 각각 무엇인가?

pid = 3875 ->자식

부모는 알수없다.

 

2. 실행 직후 부모 프로세스에서 수행되는

문장은 무엇인가?

pid = fork( );

printf("PARENT: Child pid = %d\n", pid);

 

3. 실행 직후 자식 프로세스에서 수행되는

문장은 무엇인가?

printf("CHILD: Child process is running.\n");

 

4. 자식 프로세스 제거 직후 부모

프로세스에서 수행되는 문장은

무엇인가?

printf("PARENT: Child exited (parent is still 

running)\n");

 

반응형

댓글