[OS] 자식 프로세스 2개 생성 , kill 명령어 실행하기

2021. 5. 17. 00:36IT

SMALL

프로세스 확인하기

1. 부모 프로세스 1개, 자식 프로세스 2개 생성하기

  • 실행 코드
    1. 자식 프로세스 2개를 생성하기 위해 fork 함수를 두 번 호출한다.
      1. fork()를 두 번 하게 되면 자식 1명의 자손 프로세스 1개까지 생겨 총 4개의 프로세스가 생성된다.
      2. 총 프로세스의 개수는 fork의 횟수(n)의 2의 n제곱이다.
    2. fork 함수는 자식 프로세스에게는 0을 반환하고, 부모 프로세스에게는 자식 프로세스의 pid를 반환한다.
    3. 처음 pid는 fork()에게 자식 프로세스의 pid를 받고, else 문으로 간다.
      1. 이때, wait(NULL); 을 통해 부모 프로세스는 자식 프로세스가 끝날 때까지 기다리게 된다.
    4. 자식 프로세스가 생성되어 pid는 fork 함수에게 0을 받고, 조건문을 실행한다.
      1. execlp 를 통해 자식 프로세스는 다른 기능 ('ls') 을 부여받는다.
     
  • 실행 결과
    • 계속 while 문을 반복한다.
     
  • 프로세스 목록 확인
    • 프로세스 계층 구조
      1. 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