아파치 2.x cgi 에서 자식과 인연을 끈기.

qprk의 이미지

c 로 cgi 를 만들고 있습니다.

아파치 1.x 버전에서는 별 탈 없이 잘 돌아가던것이 2.x 로 업그레이드 하면서 부터 이상하게 동작을 해서 원인을 파악해보니

cgi 가 몇몇 프로그램을 bg 로 실행한 다음 cgi 는 죽어야 합니다.

그런데 문제는 cgi 가 죽지 않는다는것 입니다.

cgi 에서 실행하는 자식 프로세스는 초기에는

system("aaa &");

로 하다가 잘 안되어

fork 도 해보고 setsid 등을 호출해 보기도 했지만..

실행된 자식 프로세스가 종료할때까지 해당 cgi 는 defunct 상태로 남아 있습니다.

혹시 이런 경험을 하신분의 조언을 듣고 싶습니다.

aa.c

#include<stdio.h>
#include<unistd.h>
#include<sys/types.h>

main()
{


  system("./bb.out &");




  {
    pid_t myPid, myGid;
    setsid();
    myGid = getgid();
    myPid = getpid();
    setpgid(myPid, myGid);
  }
  

  fflush(stdout);
  //  sleep(10);
}

bb.c

#include<stdio.h>


main()
{
  sleep(20);
  printf("adsfadfadf\n");
}

위의 코드에서 아파치는 aa.c 를 호출하고 aa.c 에서 bb.c 를 호출합니다.
이때 bb.c 는 20초 후에 자동 종료하고 aa.c 는 바로 종료되어야 정상인데...

aa.c 가 bb.c 가 종료되기까지 20초 동안 defunct 상태로 남아 있는 현상 입니다.