2013-05-06 5 views
1

proc_open을 사용하면 으로 표시된 리소스 핸들을 반환합니다. 이 코드는 서버에서 실행되며이 ID를 사용하여이 '핸들'을 다시 사용하려고합니다. 하지만 클라이언트와 서버간에 데이터를 전송 한 후에는 포인터 대신 리소스 ID 인 만 있습니다.리소스 ID로 리소스를 만드는 방법은 무엇입니까?

유일한 ID로 리소스를 다시 만들 수 있습니까?

답변

1

아니요, 이것은 새로운 요청에서 자원이 여전히 액세스 가능한지 여부를 알 수 없으므로 안정적으로 작동 할 수 없습니다. Apache와 같은 사전 설치 환경에서 두 번째 요청은 전혀 다른 프로세스에서 실행될 수 있습니다. 같은 리소스가 OS 레벨에서 불가능할 것입니다. 또한 클러스터 된 및/또는로드 균형 조정 된 환경에서 두 번째 요청은 완전히 다른 서버로 끝날 수도 있습니다.

+0

그러나'proc_open'에 의해 생성 된 프로세스는'proc_close'를 사용할 때까지 닫히지 않아야합니다. 따라서 프로세스가 여전히 실행 중입니다. 프로세스 ID를 사용할 수있을 때 프로세스를 사용하거나 새로운 프로세스를 생성 할 수 있습니까? – dahui

+0

위에서 말했듯이, 정규 호스팅 환경에서는 문제의 프로세스와 관련이 없을 수도 있습니다. Apache는 적어도 정상적인 상황에서 10 명의 자녀를 prefork하기 때문에 최선으로 작동 할 수있는 10 %의 가능성이 있습니다. [proc_get_status] (http://www.php.net/manual/en/function.proc-get-status.php)를 사용하여 프로세스의 PID를 검색하고 나중에 쉘 기반으로 해당 작업을 수행 할 수 있습니다 명령,하지만 당신이 얻을 수있는 최고입니다. –

+0

너무 나쁩니다. 리소스를 서버의 메모리 어딘가에 저장할 수 있습니까? 요청이 왔을 때, 나는 단지 저장된 자원을 사용합니까? – dahui