さらに、入力データが不正で、スクリプトがそれを検出できずに異常終了した場合も、非常に不快になります。
どうすればいいでしょうか?
はは、心配しないでください。
それはなぜですか?
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']} が
} で終了しました";
}
}