좀비 프로세스와 고아 프로세스

이동욱

2021/04/03

Categories: 운영체제 Tags: 운영체제

좀비(zombie) 프로세스란


고아 프로세스란(orphan)


실습


#include <stdio.h>
#include <stdlib.h>
#include <sys/types.h>
#include <sys/wait.h>
#include <unistd.h>
#include <errno.h>

int main ()
{
  pid_t child_pid;
  int child_status;

  child_pid = fork ();
  if (child_pid > 0) {
    // parent process will sleep for 30 seconds and exit, without a call to wait()
    fprintf(stderr,"parent process - %d\n", getpid());
    sleep(30);
    exit(0);
  }
  else if (child_pid == 0) {
    // child process will exit immediately
    fprintf(stderr,"child process - %d\n", getpid());
    exit(0);
  }
  else if (child_pid == -1) {
    // fork() error
    perror("fork() call failed");
    exit (-1);
  }
  else {
    // this should not happen
    fprintf(stderr, "unknown return value of %d from fork() call", child_pid);
    exit (-2);
  }
  return 0;
}

위와 같은 소스 코드를 작성하고 컴파일을 한 뒤에 실행을 해보자. 소스 코드의 대략적인 내용은 부모 프로세스에서 자식 프로세스를 만들고 나서, wait() 호출을 하지 않고 종료 시켜버리는 것이다.

gcc -o zombie zombie.c

실행을 하기 전에, top 명령어를 통해서 좀비 프로세스의 여부를 확인한 모습이다.

Screen Shot 2021-04-03 at 9 05 53 PM copy

좀비 프로세스가 없다는 것을 확인할 수 있다. 아까 작성한 프로그램을 실행 시킨 후에, 다시 한 번더 확인하였을 때는 다음과 같이 표시됨을 확인할 수 있다.

zombie_after

아까는 존재 하지 않았던, 좀비 프로세스가 생긴 것을 확인할 수 있다.

참고 문헌

>> Home