엔지니어가 되고 싶은 공돌이
08. Fork and Exec 본문
8. 1. Fork and Exec
- Program Execution: system(const char *string);
실행할 프로그램을 string에 넣습니다.
- fork(): Process를 생성하는 함수.
- fork함수를 호출한 Process를 Parent Process, fork에 의해 새로 생성된 Process를 Child Process.
1) 부모 프로세스가 fork 함수 모듈을 호출합니다.
2) fork함수 모듈이 새로운 프로세스를 생성합니다.
3) Child Process는 Parent Process의 Memory를 복사합니다.
4) Parent Process는 Child Process의 PID를 받고, Child Process는 0을 Return 받습니다.
5) Parent Process, Child Process는 열린파일을 공유하기에 read/write에 주의해야 합니다.
- Program Termination: exit(), atexit(*func);
- exit()는 단순한 종료를, atexit()는 func작업을 수행하고 종료합니다.
- atexit()가 여러개 있으면 역순으로 실행합니다.
- fork()는 새로운 프로세스를 만들기 위해 메모리를 할당하고,
부모와 자식 둘 다 존재하지만,
exec()는 새로운 프로세스를 위한 메모리를 할당하지 않고,
exec()를 호출한 프로세스를 호출당한 프로세스로 바꿉니다.
- fork()를 수행해서 child process를 만들고, child process를 exec()를 이용해서 원하는 프로세스로 바꿉니다.
8. 2. Process Synchronization
- Parent Process와 Child Process는 순서와 상관없이 실행되고, 먼저 실행을 마친 Process가 먼저 종료됩니다.
- 실행을 종료하고 자원을 반납한 Child Process의 종료 상태를 Parent Process가 가져가지 않으면,
Zombie Process가 발생하게 됩니다.
Zombie Process는 Process Table에만 존재하기에,
Memory 공간을 낭비하면서 추후 다른 문제를 야기할 수 있습니다.
- 고아프로세스(Orphan Process): Child Process보다 Parent Process가 먼저 종료되는 경우.
Orphan Process는 1번 프로세스(init Process)의 Child Process로 등록됩니다.
- wait(): Child Process가 종료될 때까지 Parent Process를 기다리게 하는 함수.
1) wait()를 호출하기 전에, Child Process가 먼저 종료되면 wait()는 즉시 Return 됩니다.
2) wait() 함수의 Return은 Child Process의 PID.
3) Return Value가 -1이면 Child Process가 하나도 없다는 의미입니다.
'Computer Science > Unix' 카테고리의 다른 글
10. Socket (0) | 2025.03.17 |
---|---|
09. Thread (0) | 2025.03.16 |
07. Process (0) | 2025.03.14 |
06. File System (0) | 2025.03.11 |
05. High-Level File I/O (0) | 2025.03.10 |