ホームページ  >  記事  >  バックエンド開発  >  PHP マルチプロセスはメモリ内にコードが常駐する問題を解決します

PHP マルチプロセスはメモリ内にコードが常駐する問題を解決します

WBOY
WBOYオリジナル
2016-07-25 08:58:332004ブラウズ
  1. #!/bin/env php
  2. /**php
  3. * @filename fork.php
  4. * @edit bbs.it-home.org
  5. * @version 1.0.0
  6. でマルチプロセス アプリケーションを示す例*/
  7. /**この関数が SHELL でのみ実行できることを確認してください*/
  8. if
  9. (substr(php_sapi_name(), 0, 3) ! == 'cli')
  10. {
  11. die("このプログラムは CLI モードでのみ実行できます");
  12. }
  13. /**CLI モードでは、このステートメントは実際には不要です。*/
  14. set_time_limit(0);
  15. $pid = posix_getpid() / /メインプロセスIDを取得
  16. $user = posix_getlogin(); //ユーザー名を取得
  17. echo
  18. <<USAGE: [コマンド | 式]
  19. 新しいプロセスをフォークして実行するPHPコードを入力します
  20. input quit to exit
  21. Shell Executor version 1.0.0 by laruence
  22. EOD;
  23. while
  24. (true)
  25. {
  26. $prompt = "n{$user}$ ";
  27. $input = readline($prompt);
  28. readline_add_history( $input );
  29. if
  30. ($input == 'quit')
  31. {
  32. break;
  33. }
  34. process_execute($input . ';');
  35. }
  36. exit(0);
  37. function
  38. process_execute($input)
  39. {
  40. $pid = pcntl_fork(); //子プロセスを作成します
  41. if
  42. ($pid == 0)
  43. {//Subprocess
  44. $pid = posix_getpid();
  45. echo
  46. "* プロセス {$pid} が作成されました, and Executed:nn";
  47. eval($input); //コマンドを解析
  48. exit;
  49. }
  50. else
  51. {//メインプロセス
  52. $pid = pcntl_wait($status, WUNTRACED); //終了ステータスを取得子プロセスの
  53. if
  54. (pcntl_wifexited($status))
  55. {
  56. echo
  57. "nn* サブプロセス: {$return['pid']} が {$status} で終了しました";
  58. }
  59. }
  60. }
  61. ? >
コードをコピー

上記のコードのコメントに注目してください。これは誰もが理解しやすく、コードの本質でもあります。



声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。