Process IDs (PID)
-
프로세스에 부여된 식별 번호
-
부모 프로세스
- 자신을 생성한 프로세스
- 모든 프로세스는 부모 프로세스가 있음
- 최상위 프로세스 = kernel (pid=0)
- PPID
![](https://velog.velcdn.com/images/ooweatah/post/da6cf1f9-2bb1-49d5-95a3-359d821f8924/image.png)
Running a new process
Executing a new program
- 바이너리 프로그램을 읽어서 자신을 호출한 프로세스의 메모리 영여겡 덮어 씀. 기존 프로그램은 중지 됨
Creating a new process
- 자신을 호출한 프로세스를 복사하여 새로운 프로세스를 생성
![](https://velog.velcdn.com/images/ooweatah/post/074c027c-c531-4050-a002-0ccd7ed088db/image.png)
![](https://velog.velcdn.com/images/ooweatah/post/034f0c06-d81b-4caa-8d2c-ade3646ba923/image.png)
printf가 출력되지않는다. 이유 : 기존이 종료가 되고 메모리는 새롭게 실행한 것이 차지한다.
![](https://velog.velcdn.com/images/ooweatah/post/120fbbb4-0cd3-4f08-b14d-907a264425c0/image.png)
execv, argv는 argv가 string의 배열이 된다. 첫번째 인자는 ls
마지막은 null
프로세스를 호출한 메모리 영역에 ls의 바이너리 프로그램을 복사했기 때문에
after는 더이상 실행되지 않는다.
[fork()]
- 자신을 복사해 새로운 프로세스 생성
- 부모와 자식 프로세스의 수행은 동시 진행
- return -1 : 에러
- 부모 프로세스 : 자식 프로세스의 PID
![](https://velog.velcdn.com/images/ooweatah/post/b9bfd09d-c51d-49f6-85a3-9fd11ad260fb/image.png)
![](https://velog.velcdn.com/images/ooweatah/post/0dea67c3-7f10-446c-93f8-d96c78238387/image.png)
end of fork가 각각의 독립성을 가지고 2번 출력된다.
![](https://velog.velcdn.com/images/ooweatah/post/8b72cad8-850b-478f-971f-8d9d7f15b158/image.png)
자식의 종료 상태를 얻어오는 방법
![](https://velog.velcdn.com/images/ooweatah/post/e4ef3575-19b0-4fea-9fc7-6454edfc8b15/image.png)
status : exit staus를 저장할 위치
![](https://velog.velcdn.com/images/ooweatah/post/e2a320c9-bce7-4637-9ab2-85642078a8d3/image.png)
![](https://velog.velcdn.com/images/ooweatah/post/a6a3f030-694a-4cf0-8744-cb61c3d6e35b/image.png)
자식이 여러명일 경우 특정 자식을 가져오기
![](https://velog.velcdn.com/images/ooweatah/post/51cb9d1e-3ca1-4686-8dd8-a6a7a7f31ef0/image.png)
-
option
- WNOHANG
- 자식이 종료하기 전이라도, 상태값 바로 반환
- 대기하지 않고 수행을 계속 함
- WNOWAIT
- 상태 값을 반환한 자식 프로세스를 대기 상태로유지
- 다시 exit status를 요청할 수 있음
![](https://velog.velcdn.com/images/ooweatah/post/94450916-b169-4555-b1a7-4746c4e49a37/image.png)