프로세스의 계층 구조
최상위 init 프로세스는 부모이다. 그 아래 login, sshd(실행파일이름) 프로세스는 자식들이고 그 아래 또 자식들이 생긴다.
각각의 프로세스마다 각자의 고유한 프로세스 id를 가지고 있다.
각 부모 프로세스는 자식 프로세스를 생성할 수 있다.
자식 프로세스가 종료될때 부모 프로세스가 자식 프로세스를 정리해주는 작업을 한다. 정리를 안해주면 자식프로세스가 종료 후 좀비 프로세스가 된다. 좀비프로세스가 많이 생기게 되면, 시스템 효율이 낮아진다.
좀비프로세스란?
- 종료 처리 중 멈춰 있는 상태의 프로세스
- 자식 프로세스가 종료되었지만 , 부모 프로세스가 해당 프로세스의 종료에대해 처리하지 않아 커널 프로세스 테이블에 남아 있는 상태의 프로세스.
- 좀비 프로세스가 생성되면 커널 프로세스 테이블을 점유하고, 리소스를 낭비시킨다. 그래서 반드시 부모 프로세스가 자식 프로세스에 대한 종료 처리를 해야한다.
fork 함수
부모 프로세스가 자식프로세스를 생성할때 자식 프로세스에는 부모 프로세스의 주소 공간과 똑같은 주소간이 생긴다.
자식 프로세스가 생성되면 자식 프로세스는 부모 프로세스가 실행했던 코드 이후 부터 실행을 한다.
#사용함수 pid_t fork(void)
*파라미터 : 없음
*반환값 이 0면 자식 프로세스고, 반환값이 자식프로세스의 pid라면 부모 프로세스 이다.
*실패했을때 반환값은 부모 프로세스는 -1로 받고, 자식 프로세스는 실패했을때 프로세스 자체가 생성되지 않는다.
#사용함수 pid_t getpid(void); pid_t getppid(void);
*현재 프로세스의 부모 프로세스의 pid 얻기 : getppid();
*현재 프로세스의 pid 얻기 : getpid();
fork() 함수 실습
fork() 함수 결과
새로운 프로그램 실행 exec()
부모 프로세스가 fork() 를 통해서 자식프로세스를 생성한다. 그리고 자식프로세스는 exec() 를 통해서 새로운 데이터로 채운다. fork() 로 생성된 자식 프로세스는 사라지고 exec() 로 새롭게 생성된 자식만 남는다.
#사용함수 int execl(…);
*반환값 : 실패시에만 -1 리턴
프로세스 종료
#사용함수 void exit(int status);
*파라미터
-status : 종료 상태
-0 : 정상적으로 종료됨 (성공)
-0이 아니면 : 실패
c 언어 main 함수에서 리턴이 되면 프로그램이 끝난다. 그때 0을 리턴해주는 것도 내부적으로 exit api 를 호출하고 파라미터 값으로 정상 종료되었다는 의미의 0을 넣어주는 것이다.
자식 프로세스 종료 시그널
-init 프로세스를 제외한 모든 프로세스는 sigchld 시그널을 가지고 있다.
-자식프로세스가 종료되었을때, 부모 프로세스에게 sigchld 시그널을 전송한다.
-부모 프로세스는 sigchld 에 대해 항상 수신할 준비하고 있다.
-부모 프로세스는 sigchld를 수신하면 자식 프로세스 상태를 확인한다.(종료된 자식 프로세스 처리)
자식프로세스 종료 대기 - wait()
#pid_t wait(int *wstatus);
*자식 프로세스가 실행되면, 부모 프로세스가 wait 프로세스를 실행하고, 자식 프로세스가 종료될때까지 부모 프로세스는 블락킹 된다. 자식 프로세스가 종료되면 자식 프로세스의 종료 상태가 부모 프로세스에 있는 wait 함수의 파라미터로 날라온다.
*파라미터 : wstatus : child process의 종료 상태
*반환값은 종료된 자식 프로 세스의 pid, 실패시 -1 을 리턴한다.
exec 함수 실습
exec 함수 결과 - 성공
exec 함수 결과 - 실패
'컴퓨터 기초 > 운영체제 실습' 카테고리의 다른 글
[운영체제 실습] 6.파일과 디렉토리 (0) | 2020.06.25 |
---|---|
[운영체제 실습] 5.파일 다루기(라이브러리) (0) | 2020.06.23 |
[운영체제 실습] 4.에러처리 및 파일 다루기(low level) (0) | 2020.06.23 |
[운영체제 실습] 3.리눅스 커멘트라인 인자와 응용 (0) | 2020.06.22 |
[운영체제 실습] 2.파일 쓰기와 파일 읽기 (0) | 2020.06.16 |