PHPマルチプロセス問題解決

WBOY
リリース: 2016-06-13 12:22:55
オリジナル
1073 人が閲覧しました

さらに、入力データが不正で、スクリプトがそれを検出できずに異常終了した場合も、非常に不快になります。
どうすればいいでしょうか?
はは、心配しないでください。
それはなぜですか?
1. 複数のプロセスを使用する場合、子プロセスが終了した後、カーネルがリソースをリサイクルします。
2.複数のプロセスがある場合、子プロセスの異常終了によってプロセス全体が終了することはありません。親プロセスは、タスクの分散のみを担当する常駐のメインプロセスを再構築することができます。
では、どうすればよいでしょうか?
次に、PHP が提供する POSIX と Pcntl シリーズの関数を使用して、ユーザー入力を受け入れ、フォークします。
コードは次のとおりです。コメントがあれば追加しました。理解できれば、関連する関数を読むことができます。


コードをコピーします コードは次のとおりです:

#!/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
* @version 1.0.0
*/
/**この関数が SHELL でのみ実行できることを確認してください*/
if
(substr(php_sapi_name(), 0, 3) != = 'cli')
{
die("このプログラムは CLI モードでのみ実行できます");
/**CLI モードでは、このステートメントは実際には不要です。*/
set_time_limit(0 );
$pid = posix_getpid(); //メインプロセス ID を取得します
$user = posix_getlogin() //ユーザー名を取得します
echo
<<使用法: [コマンド | 式]
新しいプロセスをフォークして実行する php コードを入力
終了するために quit を入力
Laruence による Shell Executor バージョン 1.0.0
while
(true)
{
$prompt = "n{$user}$ ";
$input = readline($prompt);
if
($input == '終了')
{
break;
}
process_execute($input . ';')
}
function
process_execute($input)
{
$pid = pcntl_fork(); // サブプロセスを作成します
if
($pid == 0)
{//Sub -process
$pid = posix_getpid();
echo
"* プロセス {$pid} が作成され、実行されました:nn" //Parse コマンドexit ;
}
else
{//メインプロセス
$pid = pcntl_wait($status, WUNTRACED) //子プロセスの終了ステータスを取得します
if
(pcntl_wifexited($status ))
{
echo
"nn* サブプロセス: {$return['pid']} が
} で終了しました";
}
}


ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
最新の問題
人気のおすすめ
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート