프로세스의 생성
- fork 시스템 호출
pid_t fork(void);
return : 성공시 pid, 0 / -1 (실패원인 : 시스템 전체의 프로세스 수 제한, 한 프로세스 생성할 수 있는 프로세스 수 제한)
→ 수행되던 프로세스(parent)의 복사본 process(child) 생성
→ fork() 바로 다음 문장부터 동시에 실행
- 두 프로세스의 차이점
- pid와 ppid가 다르다
- fork()의 반환값이 다르다
- parent procee : child process의 pid
- child process : 0
- fork : 파일과 자료
- 모든 변수 값이 그대로 복제 된다
- fork()후에 변경된 값은 복제되지 않는다
- file descriptor도 복제된다.
- parent process가 open한 file은 child process에게도 open;
- parent와 child가 파일을 공통으로 사용 가능
exit 시스템 호출
- 사용법 :
void exit(int status);
exit : process 정지 → open된 파일 닫기 → clean-up-action
- clean-up-action 지정
int atexit(void (*func) (void)); // 지정된 순서의 역순으로 실행
exec 이용하여 새 프로그램 수행
프로세스 동기화
- wait 시스템 호출 :
- 하나 이상의 child process 수행 시 아무나 하나가 종료되면 return
- status : child의 종료 상태가 전달
pid_t wait(int *status);
return : 종료된 child의 id / -1(살아있는 child process가 없는 경우)
- WIFEXITED(status) : status의 하위 8bit가 0인지 검사 → 정상 종료인지 검사
- WEXITSTATUS(ststus) : status의 상위 비트에 저장된 값을 return;
왜?) child가 parent에게 전달하는 값이 status의 상위 8bit에 저장됨
'programming > Unix' 카테고리의 다른 글
[Unix Programming] 9. 메모리 매핑 (0) | 2024.12.12 |
---|---|
[Unix Programming] 8. 시그널 (0) | 2024.12.12 |
[Unix Programming] 6. 프로세스 정보 (1) | 2024.12.11 |
[Unix Programming] 5. 시스템 정보 (0) | 2024.12.11 |
[Unix Programming] 4. 파일 입출력 (1) | 2024.12.09 |