ホームページ  >  記事  >  バックエンド開発  >  PHP CLI モードでのマルチプロセス アプリケーション分析_PHP チュートリアル

PHP CLI モードでのマルチプロセス アプリケーション分析_PHP チュートリアル

WBOY
WBOYオリジナル
2016-07-21 15:09:47993ブラウズ

PHP は多くの場合、常駐 SHELL プロセスには適していません。専用の gc ルーチンがなく、効果的なメモリ管理方法もありません。そのため、PHP を常駐 SHELL として使用すると、メモリ不足により強制終了されることがよくあります。

さらに、入力データが不正で、スクリプトがそれを検出しない場合、非常に不幸になります

どうすればよいでしょうか?

なぜですか?


利点:
1 メインプロセスはタスクの分散のみを担当し、ロジックがより明確です
それでは、どうすればよいでしょうか?

次に、PHP が提供する POSIX および Pcntl シリーズの関数を使用します。 PHPコマンドパーサーを実装し、メインプロセスがユーザー入力を受け入れる責任を負い、その後フォーク子プロセスが実行され、子プロセスの終了ステータスをエコーする責任があります

コードは次のとおりです。理解できない点がある場合は、マニュアルの関連する機能を読むか、メッセージに返信してください。




コードは次のとおりです:

#!/bin /env php /**php でマルチプロセス アプリケーションを示す例 * @filename fork.php * @touch date Wed 10 Jun 2009 10:25:51 PM CST
* @author Laruence
* @license http://www.zend.com/license/3_0.txt PHP ライセンス 3.0
* @バージョン 1.0.0
*/

/**この関数が SHELL でのみ実行できることを確認してください*/
if (substr(php_sapi_name(), 0 , 3) !== 'cli') {
die ("このプログラムは CLI モードでのみ実行できます");

/**CLI モードでは、このステートメントは実際には不要です。*/

$pid = posix_getpid(); // メインプロセス ID を取得します
$ user = posix_getlogin(); // ユーザー名を取得します

echo <<USAGE: [コマンド | 式]
新しいプロセスをフォークして実行する php コードを入力
終了するには quit を入力

バージョン 1.0.0 by laruence

while (true) {

$prompt = "n{$user}$ ";

readline_add_history($input); ($input == '終了') {
break;
}
process_execute($input . ';')
}

function process_execute ($input) {
$pid = pcntl_fork( ); // サブプロセスを作成します
if ($pid == 0) {// サブプロセス
$pid = posix_getpid();
echo "* プロセス {$pid} が作成され、実行されました:nn"; eval($input); //コマンドを解析します
exit; else {//メインプロセス
$pid = pcntl_wait($status, WUNTRACED) //子プロセスの終了ステータスを取得します
if (pcntl_wifexited($) status)) {
echo "nn* サブプロセス: {$pid} が {$status} で終了しました";



ただし、注意しなければならないことが 1 つあります。コード

コードは次のとおりです:


Web サーバー環境内でプロセス制御を有効にしないでください。Web サーバー環境内でプロセス制御関数を使用すると、予期しない結果が発生する可能性があります。 --PHP ハンドから抜粋。言ってください、あなたを払拭してください PHP Web開発でマルチ処理のアイデアを使用してください



原文: http://www.laruence.com/2009/06/11/930.html




http://www.bkjia.com/PHPjc/327195.html

www.bkjia.com
tru​​e

http://www.bkjia.com/PHPjc/327195.html
技術記事 PHP は、多くの場合、専用の gc ルーチンを持たず、有効なメモリ管理方法を持たないため、常駐 SHELL プロセスとして使用すると、メモリ不足が発生することがよくあります。


声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
前の記事:HBase Thrift インターフェイス_PHP チュートリアルに基づいた、いくつかの使用上の問題と関連する注意事項の詳細な説明次の記事:HBase Thrift インターフェイス_PHP チュートリアルに基づいた、いくつかの使用上の問題と関連する注意事項の詳細な説明

関連記事

続きを見る