2013-10-16 2 views
0

나는 pcnt의 pcntl_fork()로 작업하고 있었다. CLI에서 실행하는 것으로 올바른 결과를 얻었지만 아파치에서 실행했을 때 예외가 발생했다. '정의되지 않은 함수 pcntl_fork() '아파치를 통해 pcntl 함수를 실행하는 방법

을 그리고 그래 내가 아파치를 통해 실행하는 것은 충분히 안전하지 않습니다 읽어 보시기 바랍니다!

내 질문 :

그 주변에 어떤 일이 있습니까 내가 아파치를 통해 PHP 스크립트를 갖는 pcntl_fork() 구현을 실행할 수 있습니다?

왜 CLI에서 충분히 아파치하지만 안전을 통해 분기 실행하는 데 안전하지 않습니다 첫 번째 장소에서?

답변

0

예를 들어 사용자가 페이지 요청을 취소 한 경우 (브라우저에서 '중지'를 누르거나 '뒤로'또는 '새로 고침'등) 원하는 경우 스크립트를 계속 실행하려면 고려하십시오 ignore_user_aborthttp://www.php.net/manual/en/function.ignore-user-abort.php. 이 아파치에서 포크 허용되지 않는 이유에 대해서는

, 그것은 방식 PHP는 아파치와 인터페이스되어 있기 때문에 방법입니다. 이 부분에 대해 자세히 설명 할 수있는 깊은 지식은 없지만 아마도 다음과 같습니다.

mod_php를 사용하면 Apache는 모든 요청에 ​​대해 새로운 PHP 프로세스를 생성합니다. 이는 아파치가 각 프로세스를 추적하고 요청이 끝나면 프로세스를 종료해야 함을 의미합니다.

그러나 mod_fcgi와 다른 것들 (나는 생각한다)은 하나의 PHP 프로세스가 여러 개의 요청에 대해 생성된다. 이것은 프로세스가 계속 실행되고 새로운 요청을 수락한다는 것을 의미한다. 그러나 메모리 누출을 제어하기 위해 자식 PHP 프로세스는 주기적으로 종료됩니다.

이제 이러한 PHP 프로세스 하위 내에서 새 프로세스를 생성하려고하면 어떤 일이 발생할지 솔직하게 알 수 없습니다. 스폰 된 프로세스가 죽지 않고 자원을 계속 소모 할 가능성이 가장 높습니다.

관련 문제