250x250
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 |
Tags
- 강화학습
- JPA
- python
- 이분탐색이란
- 점근적 표기법
- Kruskal
- JVM
- 힙트리
- 프로세스
- 최소힙
- 연결리스트
- HTTP
- 완전이진트리
- SpringSecurity
- AVL트리
- 스케줄링
- 운영체제
- 연결리스트 종류
- jpa n+1 문제
- spring
- 멀티프로세서
- heapq
- 자료구조
- MSA
- posix
- 알고리즘
- 백준장학금
- 최대 힙
- 엔티티 그래프
- 백준 장학금
Archives
- Today
- Total
KKanging
[운영체제] Process API in POSIX (기초) 본문
fork()

fork()
return -> 자식은 0 부모는 자식의 프로세스 번호
window의 경우에는 프로그램과 이름이 같은 프로세스를 생성하지만
fork(posix)는 부모와 거의 동일한 프로세스를 생성한다.
부모 프로세스는 자식 프로세스의 pid를 받고
자식프로세스는 0을 받게 된다.
fork() 이후부터는 다른 실행 버전이 되게 된다.
자기 자신의 주소 공간, 레지스터등을 복사한 새 프로세스 생성
Deteministic 한 프로세스

위를 실행 해보면 바로 위와 같은 실행 결과가 나온다.
이는 예상하지 못하는 실행 결과가 나오므로
정해진 실행결과를 유도할 필요가 있다.
wait()
정해지는 작업을 위해
대체로 부모 프로세스는 자식 프로세스가 종료시까지 대기한다.

자식 프로세스가 정상적으로 종료 | 프로세스 ID | - WIFEXITED(statloc) 매크로가 true를 반환 |
- 하위 8비트를 참조하여 자식 프로세스가 exit, _exit, _Exit에 넘겨준 인자값을 얻을 수 있음, WEXITSTATUS(statloc) | ||
자식 프로세스가 비정상적으로 종료 | 프로세스 ID | - WIFSIGNALED(statloc) 매크로가 true를 반환 |
- 비정상 종료 이유를 WTERMSIG(statloc) 매크로를 사용하여 구할 수 있음 | ||
wait 함수 오류 | -1 | - ECHILD : 호출자의 자식 프로세스가 없는 경우 |
- EINTR : 시스템 콜이 인터럽트 되었을 때 |
exec() 계열 함수들
exec 계열 함수들은 프로세스 생성과는 거리가 멀다
대신에 호출을 하게 되면 지금 실행중인 프로세스에 메모리 영역을
매게 인자로 넘어온 filename 의 프로세스 상태로 대체한다
그리고 main 부터 실행하는데 main 의 char * arg[] 메게인자에 전달한 파라미터
값을 넘겨준다.
여기서 주의할 점은 프로세스 상태를 바꾸는 개념이라서 pid 나 그룹 pid fd 같은
것들은 변경 되지 않는 점을 유의 하자
int execl(const char *pathname, const char *arg0, ... /* (char *)0*/);
int execv(const char *pathname, char *const argv[]);
int execle(const char *pathname, const char *arg0, .../*(char *)0, char *const envp[] */);
int execve(const char *pathname, char *const argv[], char *const envp[]);
int execlp(const char *filename, const c har *arg0, .../* (char *)0 */);
int execvp(const char *filename, char *const argv[]);
Redirection

file discription
파일 기술자를 제공한다.
012 는 std in out err
fork를 하면 child도 동일한 파일 기술자 테이블을 가진다.
값만 같지 주체는 다르게 된다 복사의 개념
이 예제는 파일 기술자를 안받는데 알고 있기 때문이다.
비어 있는 가장 작은 파일 기술자를 할당받게 되는데 위에서 1을 삭제 했기 때문에
1을 할당 받게된다.
'cs > 운영체제' 카테고리의 다른 글
[운영체제] MULTI-LEVEL FEEDBACK QUEUE (4) | 2024.05.01 |
---|---|
[운영체제] 스케줄링과 Basic Algorithms (0) | 2024.04.30 |
[운영체제] 제한적 직접 실행 원리 (0) | 2024.04.29 |
[운영체제] 프로세스란 (0) | 2024.04.29 |
[운영체제] 운영체제란 (0) | 2024.04.28 |