728x90
반응형
- 동시에 2개 이상의 실행 흐름을 만들어 낼 수 있다.
- 부모-자식 관계가 형성된다.
- 실행하는 시점에 동일한 프로세스 이미지가 하나 더 생성된다.
- 주소공간: 부모의 하위 중복, 자식이 프로그램을 로드한다.
- fork() system: 호출을 통해 새로운 프로세스 생성
- 프로세스의 메모리 공간을 새 프로그램으로 바꾸기 위해 fork() 뒤에 사용되는 exec()
c언어(Linux)
#include <sys/types.h>
#include <stdio.h>
#include <unistd.h>
#include <sys/wait.h>
int main(int argc, char* argv[]){
pid_t pid;
pid = fork();
if(pid<0){
fprintf(stderr, "fork failed");
return 1;
}
else if(pid>0){ // 부모 프로세스 생성
printf("hello\n");
wait(NULL); // 자식 프로세스가 끝날 때까지 기다린다.
}
else{ // 자식 프로세스
printf("hello\n");
}
return 0;
}
wait(NULL)에 대해 모른다면... 이런 결과가 나온다...
왜 이렇게 나오는지 한참 찾아본 결과 wait(NULL)을 안해주면 부모 프로세스가 끝난 후 자식 프로세스의 값이 나오기 때문이라고 생각한다. 그렇기에 부모 프로세스에서 자식 프로세스가 끝날 때까지 기다려주는 wait(NULL)이 필요하다.
* 예제 문제 *
아래 코드의 실행 결과 Hello world는 몇 회 출력되는가?
#include <stdio.h>
#include <unistd.h>
int main(int argc, char* argv[]){
fork();
printf("Hello world\n");
fork();
printf("Hello world\n");
return 0;
}
더보기

* 정답*
6회 출력

728x90
반응형
'📖 이론 > 운영체제' 카테고리의 다른 글
Process Control Block(PCB) (0) | 2022.05.10 |
---|---|
process state diagram (0) | 2022.05.10 |
monolithic kernel VS micro kernel (0) | 2022.04.28 |
x86(CISC) VS ARM(RISC) (2) | 2022.04.28 |
IPC 종류와 특징 (0) | 2022.04.11 |