PHP CLI 모드 에서 의 다 중 프로 세 스 응용 분석

PHP 는 상주 하 는 SHELL 프로 세 스 에 적합 하지 않 을 때 가 많 습 니 다.그 는 gc 루틴 도 없고 효과 적 인 메모리 관리 경로 도 없습니다.따라서 PHP 로 상주 SHELL 을 하면 메모리 가 다 소모 되 어 abort 가 행복 하지 않 습 니 다.또한 입력 데이터 가 불법 이 고 스 크 립 트 가 검 측 되 지 않 아 abort 가 기분 나 쁠 수도 있 습 니 다.그러면?어 떡 하지?다 중 프로 세 스...왜 죠?장점:1.다 중 프로 세 스 를 사용 합 니 다.하위 프로 세 스 가 끝 난 후에 커 널 은 자원 을 회수 합 니 다.2.다 중 프로 세 스 를 사용 합 니 다.하위 프로 세 스 가 이상 하 게 종료 되면 전체 프로 세 스 Thread 가 종료 되 지 않 습 니 다.부모 프로 세 스 는 프로 세 스 를 재 구축 할 기회 가 있 습 니 다.그 다음 에 저 희 는 PHP 에서 제공 하 는 POSIX 와 Pcntl 시리즈 함 수 를 사용 하여 PHP 명령 해석 기 를 실현 합 니 다.메 인 프로 세 스 는 사용자 의 입력 을 받 은 다음 에 fork 서브 프로 세 스 를 실행 하고 서브 프로 세 스 의 종료 상 태 를 보 여 줍 니 다.코드 는 다음 과 같 습 니 다.저 는 설명 을 추가 하 였 습 니 다.모 르 는 부분 이 있 으 면 매 뉴 얼 관련 함 수 를 뒤 져 보 거나 메 시 지 를 답장 할 수 있 습 니 다.
 
#!/bin/env php
<?php
/** A example denoted muti-process application in php
* @filename fork.php
* @touch date Wed 10 Jun 2009 10:25:51 PM CST
* @author Laruence<[email protected]>
* @license http://www.zend.com/license/3_0.txt PHP License 3.0
* @version 1.0.0
*/

/** SHELL */
if (substr(php_sapi_name(), 0, 3) !== 'cli') {
die("This Programe can only be run in CLI mode");
}

/** , CLI , */
set_time_limit(0);

$pid = posix_getpid(); // ID
$user = posix_getlogin(); //

echo <<<EOD
USAGE: [command | expression]
input php code to execute by fork a new process
input quit to exit

Shell Executor version 1.0.0 by laruence
EOD;

while (true) {

$prompt = "
{$user}$ ";
$input = readline($prompt);

readline_add_history($input);
if ($input == 'quit') {
break;
}
process_execute($input . ';');
}

exit(0);

function process_execute($input) {
$pid = pcntl_fork(); //
if ($pid == 0) {//
$pid = posix_getpid();
echo "* Process {$pid} was created, and Executed:

";
eval($input); //
exit;
} else {//
$pid = pcntl_wait($status, WUNTRACED); //
if (pcntl_wifexited($status)) {
echo "

* Sub process: {$pid} exited with {$status}";
}
}
}

그러나 한 가지,나 는 반드시 일 깨 워 주어 야 한다.
 
Process Control should not be enabled within a webserver environment and unexpected results may happen if any Process Control functions are used within a webserver environment. -- PHP , PHP Web !
원문:http://www.laruence.com/2009/06/11/930.html

좋은 웹페이지 즐겨찾기