2012-07-04 2 views
3

사용자가 브라우저에서 서버로 데이터를 전송할 때 프로세스를 시작하기 위해 exec 또는 proc_open을 사용하는 PHP 스크립트 인 exec를 사용하는 SSI 스크립트가 있다고 가정 해보십시오. 서버가 요청 처리를 완료하고 응답을 서버로 다시 보낼 때이 생성 된 프로세스가 종료됨을 수정합니까? SSI 나 PHP 중 어떤 것을 사용하든,이 시점에서 생성 된 프로세스가 종료됩니다. 맞습니까?SSI/PHP exec 명령은 응답이 반송 될 때 종료됩니다. 맞습니까?

따라서 '프로세스를 계속 유지'할 수있는 방법이 없으므로 후속 요청에서 동일한 프로세스와 상호 작용하려면 데몬 프로그램을 작성해야합니다.

우리가 필요하기 echo "Blah"을 발견

#!/bin/bash 
/path/to/some/process </dev/zero> "$1" & 
echo "Blah" 

같은 쉘 스크립트 (wrapper.sh) 만들기 :

답변

2

실제로 살아 프로세스를 유지하는 매우 간단합니다, 우리는 모든 시간을 일부 시스템.

wrapper.sh "/path/to/output/file"으로 프로세스를 시작하면 거의 즉시 반환됩니다. 나중에 스크립트 호출시 /path/to/output/file을 읽어 결과를 얻을 수 있습니다.

+0

당신이하는 말은 확실하지 않습니다. PHP에서 wrapper.sh를 호출하면 ID가 '3'인 프로세스가 생성됩니다. 이 프로세스는 매우 강력한 계산기처럼 변수를 설정하고 계산을 수행 할 수있는 일종의 환경이라고 가정 해보십시오. 그래서 "var answer = resultFromHugeComputation()"과 같은 변수를 설정했는데 클라이언트에게 'answer'변수를 다시 보냈습니다. 이제 클라이언트가 서버에 새로운 요청을합니다. ID 3을 가진이 프로세스는 여전히 –

+0

첫 번째 : 예, 프로세스가 여전히 동일한 프로세스 ID로 실행됩니다 ** ** 분명히 끝나지 않는 방법으로 만 작동하는 경우입니다. : 상호 작용하려면 인프라가 많이 필요합니다. 앞서 언급 한 출력 파일 방법은 관련 요청에만 적합합니다. 나중에 프로세스를 시작한 이전 결과를 가져 오는 것입니다. 반복되는 상호 작용을 원한다면 데몬은 소켓과 같은 것입니다. –