-
- #!/bin/env php
- /**php
- * @filename fork.php
- * @edit bbs.it-home.org
- * @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
- <<USAGE: [コマンド | 式]
- 新しいプロセスをフォークして実行するPHPコードを入力します
- input quit to exit
- Shell Executor version 1.0.0 by laruence
- EOD;
- while
- (true)
- {
- $prompt = "n{$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)
- {//Subprocess
- $pid = posix_getpid();
- echo
- "* プロセス {$pid} が作成されました, and Executed:nn";
- eval($input); //コマンドを解析
- exit;
- }
- else
- {//メインプロセス
- $pid = pcntl_wait($status, WUNTRACED); //終了ステータスを取得子プロセスの
- if
- (pcntl_wifexited($status))
- {
- echo
- "nn* サブプロセス: {$return['pid']} が {$status} で終了しました";
- }
- }
- }
- ? >
-
コードをコピー
上記のコードのコメントに注目してください。これは誰もが理解しやすく、コードの本質でもあります。
|