この記事では、主に PHP マルチプロセス プログラミング方法を紹介し、PHP マルチプロセス プログラミングの概念、使用法、関連機能、および使用スキルをより詳細に分析します。必要な友人は参考にしてください。
ステップ 1:
。
$ php -m コマンドは、PHP に pcntl および posix 拡張機能がインストールされているかどうかを確認します。多くの計算を実行し、システムには複数の CPU があり、ユーザーに高速なエクスペリエンスを提供するために、タスクはいくつかの小さなタスクに分割され、最終的に結合されます。
複数のプロセスの共通関数:
pcntl_alarm
pcntl_errno — エイリアスpcntl_strerror
pcntl_exec — 現在のプロセス空間で指定されたプログラムを実行します
pcntl_ fork — 子プロセスを作成し、現在のプロセスの現在の場所にブランチ (子プロセス) を生成します。注釈: fork は子プロセスを作成します。親プロセスと子プロセスはどちらもフォーク位置から実行を継続します。違いは、親プロセスの実行中、fork の戻り値は子プロセスの番号であるのに対し、子プロセスの戻り値は子プロセスの番号であることです。プロセスは0を取得します。
pcntl_get_last_error — 失敗した最後の pcntl 関数によって設定されたエラー番号を取得します
pcntl_getpriority — 任意のプロセスの優先順位を取得します
pcntl_setpriority — 任意のプロセスの優先順位を変更します
pcntl_signal_dispatch — 呼び出し待機シグナルプロセッサー
pcntl_signal — シグナルハンドラーをインストールする
pcntl_sigprocmask — ブロッキングシグナルを設定または取得する
pcntl_sigtimedwait — タイムアウト付きでシグナルを待機する
pcntl_sigwaitinfo — シグナルを待機する
pcntl_strerror —指定された errno に関連付けられたシステム エラー メッセージを取得します
pcntl_wait — フォークの子プロセスのステータスを待つか返す
pcntl_waitpid — フォークの子プロセスのステータスを待つか返す
pcntl_wexitstatus — 中断された子プロセスのリターンコードを返す
pcntl_wifexited — チェックステータス コードが正常な終了を表すかどうか。
pcntl_wifsignaled - 子のプロセスステータスコードが信号による中断を表すかどうかをチェックします
pcntl_wifstoppedpded-子のプロセスが現在停止されているかどうかをチェックします。 — 子プロセスの原因を返します プロセス中断のシグナル
例 1: <?php
//最早的进程,也是父进程
$parentPid = getmypid();
echo '原始父进程:' . $parentPid . PHP_EOL;
//创建子进程,返回子进程id
$pid = pcntl_fork();
if( $pid == -1 ){
exit("fork error");
}
//pcntl_fork 后,父进程返回子进程id,子进程返回0
echo 'ID : ' . $pid . PHP_EOL;
if( $pid == 0 ){
//子进程执行pcntl_fork的时候,pid总是0,并且不会再fork出新的进程
$mypid = getmypid(); // 用getmypid()函数获取当前进程的PID
echo 'I am child process. My PID is ' . $mypid . ' and my fathers PID is ' . $parentPid . PHP_EOL;
} else {
//父进程fork之后,返回的就是子进程的pid号,pid不为0
echo 'Oh my god! I am a father now! My childs PID is ' . $pid . ' and mine is ' . $parentPid . PHP_EOL;
}
$aa = shell_exec("ps -af | grep index.php");
echo $aa;
例 2:
フォークフラッディングを避けるために複数の子プロセスを開く
<?php //最早的进程,也是父进程 $parentPid = getmypid(); echo '原始父进程:' . $parentPid . PHP_EOL; //开启十个子进程 for($i = 0; $i < 10; $i++) { $pid = pcntl_fork(); if($pid == -1) { echo "Could not fork!\n"; exit(1); } //子进程 if(!$pid) { //child process workspace echo '子进程:' . getmypid() . PHP_EOL; exit(); //子进程逻辑执行完后,马上退出,以免往下走再fork子进程,不好控制 } else { echo '父进程:' . getmypid() . PHP_EOL; } } echo getmypid() . PHP_EOL; $aa = shell_exec("ps -af | grep index.php"); echo $aa;
注:
via pcntl_XX Xシリーズの関数はよく使われる処理関数です。注: pcntl_XXX は php CLI (コマンド ライン) 環境でのみ実行できます。Web サーバー環境では、予期しない結果が発生する可能性があるため、注意して使用してください。
関連する推奨事項:
PHP は、複数のプロセス
同時にファイルの読み取りと書き込み
Php
複数のプロセス実装プログラミング例
に基づいてファイルロックソリューションを実装しますs 複数のプロセスとマルチスレッド
以上がPHPでマルチプロセスプログラミングを実装する方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。