본문 바로가기
728x90
반응형

• 좀비프로세스란
   ○ 프로세스가 종료되었음에도 메모리상에서 프로세스에 대한 정보가 사라지지 않은 상태를 말한다.

 

• 좀비프로세스는 왜 생기는 걸까?
    ○ 좀비프로세스가 만들어지는 상황을 보기위해 우선 호출된 자식프로세스가 종료되는 상황은 다음과 같다
        § 인자를 전달하며 exit를 호출하는 경우
        § main 함수에서 return문을 실행하여 값을 반환하는 경우

    ○ exit함수와 return 반환값은 모두 운영체제로 전달되고, 이 값이 자식프로세스를 호출한 부모프로세스에게 전달                 될 때 까지 자식프로세스를 소멸시키지 않는다.

 

>> 요약하면 다음과 같다.
     자식프로세스는 일을 끝마쳐 종료하였지만, 값을 부모프로세스에게 전달하지 못하여 아직 메모리상에 살아있는 것

 

    ○ 그렇다면 왜 운영체제는 부모프로세스에게 값을 전달하지 않는가?
        § 정확히 말하면 부모프로세스가 운영체제에게 값을 요청해야 비로소 값이 전달되기 때문이다.
        § 즉, 부모프로세스가 값을 요청하지 못하는 상황이라면 좀비프로세스가 만들어질 수 밖에 없다.
            □ sleep 함수를 이용하여 테스트예제를 만들수 있다.

• 좀비프로세스인지 어떻게 확인하는가?
    ○ ps -au 명령어를 치면 (u:지정하는 사용자 번호(UID)를 가진 프로세스 정보를 출력, a: 빈번히 사용되는 프로세스 정보     출력) STAT 항목이 나오는데 (정확히 옵션 -u 에서 나온다) 이 항목에서 Z가 바로 좀비프로세스이다.


• 좀비프로세스의 소멸에 관해
    ○ 위에 기술한 내용을 토대로 보면, exit함수 또는 return 반환 값이 부모 프로세스에게까지 전달되면 종료된다는 것을

        알 수 있다.
    ○ 그렇다면 부모프로세스가 운영체제에 전달값을 요청하는 방법은 무엇인가?
        § wait 함수를 사용하면, ( pid_t wait(int *statloc); )
        § 이 함수를 호출했을 때, 이미 종료된 자식프로세스가 있다면 자식프로세스가 종료되면서 전달한 값이 매개변수로 저장된다.
        § 그런데 이 매개변수에 저장되는 값은 전달값 이외에도 다른 정보가 포함되어있으니 구분이 필요하다.
        § WIFEXITED, WEXITSTATUS 함수를 통해 분리가 가능하다.

728x90
반응형

한걸음 한걸음

개인적인 기록