ホームページ  >  記事  >  バックエンド開発  >  php の pcntl_fork() 関数の詳細な分析

php の pcntl_fork() 関数の詳細な分析

青灯夜游
青灯夜游転載
2021-02-25 17:58:103006ブラウズ

この記事では、PHP の pcntl_fork() 関数を紹介し、その実行プロセスを理解します。一定の参考値があるので、困っている友達が参考になれば幸いです。

php の pcntl_fork() 関数の詳細な分析

[推奨学習: 「PHP ビデオ チュートリアル 」]

pcntl_fork() 関数は php-プロセスの作成に使用される pcntl モジュールの関数。 (Windows はサポート対象外です)

php_pcntl 拡張機能のインストールおよび有効化方法については、ここでは紹介せず、pcntl_fork() 関数自体の解析のみを行います。

$one = 123;
$one++;
$two = time();
$pid = [];
$pid = pcntl_fork();
$three = time();

pcntl_fork()関数が実行されると、子プロセスが作成されます。子プロセスは、現在のプロセス、つまり親プロセスに関するデータ、コード、状態をすべてコピーします。

1. pcntl_fork() が子プロセスの作成に成功すると、子プロセス番号が親プロセスに返され、子プロセスに 0 が返され、失敗した場合は -1 が返されます

2 .子プロセスは親プロセスのコードとデータをコピーします。つまり、子プロセスと親プロセスが所有するコードとデータはまったく同じになります。

3.重要なポイント: 子プロセスは親プロセスのステータスをコピーします。次に、上記のサンプル コードがあります。 5 行目, pcntl_forkが実行されると、作成したサブプロセスのコードも5行目から実行されます。 子プロセスがデータとコードをコピーしました。したがって、同様に、サブプロセスには $one、$two などの変数が存在します。

for ($i = 0; $i < 3; $i++) {
    $pid = pcntl_fork();
}
sleep(30);

So: 上記により、実際に生成されるサブプロセスはいくつになるでしょうか。ループ?答えは 7 です。 Linux では、ps コマンドを使用して 8 つのプロセス (親プロセス 1 つ、子プロセス 7 つ) を表示できます。

理由: i = 0 0 の場合、親プロセスは子プロセスを作成します。この時点のプロセスはループを実行し続けます。独自の子プロセスを作成します。同様に、これは i=1 の場合にも発生します...

プログラミング関連の知識の詳細については、プログラミング入門をご覧ください。 !

以上がphp の pcntl_fork() 関数の詳細な分析の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事はcsdn.netで複製されています。侵害がある場合は、admin@php.cn までご連絡ください。