C로 작성된 CGI 프로그램에 대해 더 안정적으로 작동하는 최적화를 얻으려고합니다.
응용 프로그램은 디스크에 동기식 쓰기를 수행하며 CGI 출력이 완료된 후 이러한 작업이 수행되기를 바랍니다. 처음에는 이것이 stdin / stdout / stderr 스트림을 닫거나 다시 여는 것만 큼 간단하다고 생각했고 실제로 이것은 여러 서버에서 완벽하게 작동했습니다. 디스크 쓰기가 몇 초가 되더라도 밀리 초 만에 사용자 응답을 받았습니다. 대기했습니다.
안타깝게도 현재 두 대의 서버에서 문제가 발생했습니다. CGI 프로그램이 stdout을 닫 자마자 Apache로부터 종료 신호를받습니다. 몇 초 후, 하드 킬을합니다. 전화 setsid()
는 이것에 영향을 미치지 않는 것 같습니다.
CGI 프로그램을 종료하지 않고 클라이언트에 출력을 보내야한다고 Apache에 알리는 다른 방법이 있습니까?
mod_cgi 및 단일 프로세스를 사용할 때이를 수행하는 방법이 없습니다. 리소스가 많이 소모되지만 일반적으로 허용되는이를 달성하는 방법을 더블 포크라고합니다. 다음과 같이 진행됩니다.
pid_t kid, grandkid;
if ((kid = fork())) {
waitpid(kid, null, 0);
}
else if ((grandkid = fork())) {
exit(0);
}
else {
// code here
// do something long lasting
exit(0);
}
이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.
침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제
몇 마디 만하겠습니다