IT
[OS] 자식 프로세스 2개 생성 , kill 명령어 실행하기
최단비(Sweet_Rain)
2021. 5. 17. 00:36
SMALL
프로세스 확인하기
1. 부모 프로세스 1개, 자식 프로세스 2개 생성하기
- 실행 코드
- 자식 프로세스 2개를 생성하기 위해 fork 함수를 두 번 호출한다.
- fork()를 두 번 하게 되면 자식 1명의 자손 프로세스 1개까지 생겨 총 4개의 프로세스가 생성된다.
- 총 프로세스의 개수는 fork의 횟수(n)의 2의 n제곱이다.
- fork 함수는 자식 프로세스에게는 0을 반환하고, 부모 프로세스에게는 자식 프로세스의 pid를 반환한다.
- 처음 pid는 fork()에게 자식 프로세스의 pid를 받고, else 문으로 간다.
- 이때, wait(NULL); 을 통해 부모 프로세스는 자식 프로세스가 끝날 때까지 기다리게 된다.
- 자식 프로세스가 생성되어 pid는 fork 함수에게 0을 받고, 조건문을 실행한다.
- execlp 를 통해 자식 프로세스는 다른 기능 ('ls') 을 부여받는다.
- 자식 프로세스 2개를 생성하기 위해 fork 함수를 두 번 호출한다.
- 실행 결과
- 계속 while 문을 반복한다.
- 프로세스 목록 확인
- 프로세스 계층 구조
- 36159 - > 36160, 36161 -> 36162 (부모 : 36160)
ps -ef | grep {찾고자 하는 키워드 파일명}
- 프로세스 계층 구조
2. "kill" 명령어 실행하기
- zombie, orphan 프로세스를 확인할 때는, wait(NULL) 을 주석 처리 해야 함.
2.1 부모 프로세스 "kill" 시킨 후, 자식 프로세스들의 상태는 ?
- "killed" 문자열이 출력되고, 부모 프로세스는 종료됨
- 자식 프로세스는 orphan 프로세스가 되지 않음
- 부모 프로세스가 죽으면, init 프로세스가 부모가 없는 자식 프로세스를 관리해 주기 때문임**
- pid 35160, 35161 는 ppid가 3809이 됨
kill -9 35159 (부모 프로세스)
- 자식 프로세스는 여전히 계속 실행됨
2.2 부모 프로세스 "kill" 시킨 후, 자식 프로세스들도 하나씩 kill을 시키면?
kill -9 35160
kill -9 35161
kill -9 35162
- 자식 프로세스도 종료되어 while문도 종료되어 더이상 명령문이 실행되지 않음.
2.2 자식 프로세스들 하나씩 "kill" 시킨 후, 상태는?
좀비 프로세스 : 자식 프로세스가 종료되었지만, 부모 프로세스가 자식 프로세스를 회수하지 않았을 경우에(wait(NULL 호출 X)) 자식 프로세스를 '좀비 프로세스' 라고 함.
- 새로운 프로세스 계층 구조
- 36279 -> 36280, 36281 -> 36282 (부모 : 36280)
kill -9 36282
- 자식 프로세스 [36282] 를 kill 하였더니, 종료한 자식 프로세스는 소멸하지 못하고 좀비 프로세스가 됨.
kill -9 36281
- 마찬가지로 좀비 프로세스가 됨.
kill 9 -36280
- [36280]도 좀비가 된 순간, 자식 프로세스였던 [36282]는 결국 소멸됨.
LIST