아파치 2.x cgi 에서 자식과 인연을 끈기.
글쓴이: qprk / 작성시간: 월, 2005/03/07 - 7:00오후
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 상태로 남아 있는 현상 입니다.
Forums:
댓글 달기