Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | |||
5 | 6 | 7 | 8 | 9 | 10 | 11 |
12 | 13 | 14 | 15 | 16 | 17 | 18 |
19 | 20 | 21 | 22 | 23 | 24 | 25 |
26 | 27 | 28 | 29 | 30 | 31 |
Tags
- 국비
- 스파르타내일배움캠프WIL
- 스파르타내일배움캠프TIL
- 개인공부
- Spring
- MySQL
- Flutter
- 소프트웨어
- 컴퓨터구조론 5판
- 스파르타내일배움캠프
- wil
- 스파르타코딩클럽
- 개발자블로그
- 백준
- 프로그래머스
- java
- 99일지
- Python
- 코딩테스트
- 중심사회
- til
- 내일배움캠프
- 자바
- 운영체제
- 99클럽
- 항해
- 컴퓨터개론
- 개발자스터디
- AWS
- 부트캠프
Archives
- Today
- Total
컴공생의 발자취
fork()_C언어(Linux) 본문
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) (0) | 2022.04.28 |
IPC 종류와 특징 (0) | 2022.04.11 |