この記事では、主に pcntl_fork の実行プロセスの例を紹介します。プロセス (プロセス) の概念は、主に次の 3 つの要素を含みます。
1. 実行可能プログラム
2. プロセスに関連付けられたすべてのデータ (変数、メモリ空間、バッファーなどを含む)
3. プログラムの実行コンテキストは次のように考えることができます。
は、単に実行可能プログラムの実行中の状態を表すものとして理解することもできます。オペレーティング システムによるプロセスの管理は、通常、プロセス テーブルを通じて行われます。プロセス テーブルの各エントリは、現在のオペレーティング システムのプロセスのステータスを記録します。 単一 CPU の場合、特定の時点で CPU を占有するプロセスは 1 つだけですが、システム内に同時に複数のアクティブな (実行を待機している、または実行を継続している) プロセスが存在する可能性があります。プログラム カウンタ (pc) と呼ばれるレジスタは、現在 CPU を占有しているプロセスによって実行される次の命令の位置を示します。プロセスに割り当てられた CPU 時間が使い果たされると、オペレーティング システムは、プロセスに関連するレジスタの値を、CPU を引き継ぐプロセス テーブル内のプロセスの対応するエントリに保存します。この処理はプロセステーブルから読み込んで対応するレジスタを更新する処理です(この処理を「
コンテキストスイッチ(プロセスコンテキストスイッチ)」と呼びます)。実際のコンテキストスイッチにはフォークとは関係なく、より多くのデータが必要です。これ以上は言いませんが、覚えておくべき主な点は、プログラム レジスタ pc が現在プログラムが実行されている場所を示しているということです。これは、CPU をスワップするプロセスが値を保存する必要があるということです。また、CPU にスワップするプロセスも、プロセス実行コンテキスト情報に従ってこのレジスタの値を保存し、このレジスタを更新する必要があります。
fock の知識
fork 後、オペレーティング システムは親プロセスとまったく同じ子プロセスをコピーします。これは親子の関係ですが、オペレーティング システムの観点からは兄弟のようなものです。これら 2 つのプロセスはコード空間を共有しますが、子プロセスのデータ空間の内容は親プロセスの完全なコピーですが、命令ポインタは 1 つだけです。 fork が成功した場合、子プロセスの fork の戻り値は 0 になり、親プロセスの fork の戻り値は 0 になります。fork の戻り値は、fork の場合は子プロセスのプロセス番号です。失敗すると、親プロセスはエラーを返します。 2 つのプロセスが同時に同じペースで実行され、フォーク後にそれぞれ異なるタスクが実行される、つまり分岐することが想像できます。これがフォークと呼ばれる理由です。どのプロセスが最初に実行されるかについては、オペレーティング システム プラットフォームのスケジューリング アルゴリズムに関連しており、この問題は実際のアプリケーションでは重要ではありません。親プロセスと子プロセスが連携する必要がある場合は、構文構造を制御することで解決できます。
2
fork前は子プロセスは親プロセスのものを継承できますが、pcntl_fork()以降は子プロセスと親プロセスの間に継承関係がありません。子プロセスで作られたものは子プロセスに属し、親プロセスで作られたものは親プロセスに属し、完全に独立した2つのプロセスとみなすことができます。
3
プログラムセグメントでpcntl_fork()を使用した後、プログラムは分岐して2つのプロセスを生成します。どちらが最初に実行されるかは、システムのスケジューリングアルゴリズムによって異なります。
ここで、「pid=pcntl_fork();」を実行すると、システムはメイン プログラムとまったく同じサブプロセスを生成すると考えることができます。プロセスの「pid=pcntl_fork();」文で取得した pid は子プロセス自体の pid であり、子プロセスの終了後は親プロセスの「pid=pcntl_fork();」文で取得した pid になります。は親プロセス自体の pid なので、プログラムには 2 行の出力があります。
4
pcntl_fork() 関数は、現在のプロセスの PCB をコピーし、派生した子プロセスの PID を親プロセスに返します。親プロセスと子プロセスは、ステートメントの出力順序に完全に依存します。システムのスケジューリング アルゴリズムと印刷コンテンツは pid 変数によって制御されます。 pcntl_fork() は派生子プロセスの pid を親プロセスに返すが、これは正の整数であることがわかっているため、派生子プロセスの pid 変数は変更されていないため、この違いにより、それぞれの異なる出力を確認できます。
5
子プロセスを派生するプロセス、つまり親プロセスは同じ pid を持ちます
子プロセスの場合、fork() 関数は 0 を返しますが、独自の pid は決して 0 ではありません。fork() 関数が 0 を返す理由は、いつでも getpid() を呼び出して独自の pid を取得できるためです。同期を使用しない限り、誰が最初に実行し、誰が最初に終了するかを決定することはできません。子プロセスが終了した後にのみ親プロセスが fork から戻ると考えるのは間違いです。これは fork の場合ではなく、vfork の場合には当てはまります。
- 例
<?php$lock = new swoole_lock(SWOOLE_MUTEX);echo "[主进程]create lock\n";$lock->lock();$res = pcntl_fork();if ($res>0) { echo "1\n"; $lock->unlock(); sleep(1); echo "222"; } else{ echo "[子进程] Wait Lock\n"; $lock->lock(); echo "[子进程] Get Lock\n"; $lock->unlock(); exit("[子进程] exit\n"); }echo "[主进程]release lock\n";unset($lock);echo "[主进程]exit\n";- 関連おすすめ:
Weibo Qzone WeChat pcntl_fork は PHP マルチプロセスを実装します
以上がpcntl_fork実行処理例の詳細説明の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

Python中的支持向量机(SupportVectorMachine,SVM)是一个强大的有监督学习算法,可以用来解决分类和回归问题。SVM在处理高维度数据和非线性问题的时候表现出色,被广泛地应用于数据挖掘、图像分类、文本分类、生物信息学等领域。在本文中,我们将介绍在Python中使用SVM进行分类的实例。我们将使用scikit-learn库中的SVM模

随着新一代前端框架的不断涌现,VUE3作为一个快速、灵活、易上手的前端框架备受热爱。接下来,我们就来一起学习VUE3的基础知识,制作一个简单的视频播放器。一、安装VUE3首先,我们需要在本地安装VUE3。打开命令行工具,执行以下命令:npminstallvue@next接着,新建一个HTML文件,引入VUE3:<!doctypehtml>

随着互联网的普及,验证码已经成为了登录、注册、找回密码等操作的必要流程。在Gin框架中,实现验证码功能也变得异常简单。本文将介绍如何在Gin框架中使用第三方库实现验证码功能,并提供示例代码供读者参考。一、安装依赖库在使用验证码之前,我们需要安装一个第三方库goCaptcha。安装goCaptcha可以使用goget命令:$goget-ugithub

VAE是一种生成模型,全称是VariationalAutoencoder,中文译作变分自编码器。它是一种无监督的学习算法,可以用来生成新的数据,比如图像、音频、文本等。与普通的自编码器相比,VAE更加灵活和强大,能够生成更加复杂和真实的数据。Python是目前使用最广泛的编程语言之一,也是深度学习的主要工具之一。在Python中,有许多优秀的机器学习和深度

生成对抗网络(GAN,GenerativeAdversarialNetworks)是一种深度学习算法,它通过两个神经网络互相竞争的方式来生成新的数据。GAN被广泛用于图像、音频、文字等领域的生成任务。在本文中,我们将使用Python编写一个GAN算法实例,用于生成手写数字图像。数据集准备我们将使用MNIST数据集作为我们的训练数据集。MNIST数据集包含

随着互联网的迅速发展,数据已成为了当今信息时代最为重要的资源之一。而网络爬虫作为一种自动化获取和处理网络数据的技术,正越来越受到人们的关注和应用。本文将介绍如何使用PHP开发一个简单的网络爬虫,并实现自动化获取网络数据的功能。一、网络爬虫概述网络爬虫是一种自动化获取和处理网络资源的技术,其主要工作过程是模拟浏览器行为,自动访问指定的URL地址并提取所

PHPPCNTL中fork失败的常见错误及解决方案在使用PHPPCNTL扩展进行进程管理时,经常会遇到fork失败的问题。fork是创建子进程的一种方法,在一些情况下可能会因为一些错误导致fork操作失败。本文将介绍一些常见的fork失败的错误以及相应的解决方案,并提供具体的代码示例来帮助读者更好地理解和处理这些问题。1.内存不足可能的错误信息:Can

VUE3作为目前前端框架中使用率日益增长的框架之一,越来越多的开发者也开始尝试学习和使用它。尤其是在国内,VUE3的应用已经覆盖了很多领域,无论是移动端还是PC端都有广泛的应用。因此,本文将为初学者提供一些VUE3开发的必备技巧和实例,以帮助他们更加快速高效的开发。使用VUE3脚手架快速创建项目在学习VUE3的过程中,很多人可能会一步一步地搭建项目,这样会花


ホットAIツール

Undresser.AI Undress
リアルなヌード写真を作成する AI 搭載アプリ

AI Clothes Remover
写真から衣服を削除するオンライン AI ツール。

Undress AI Tool
脱衣画像を無料で

Clothoff.io
AI衣類リムーバー

AI Hentai Generator
AIヘンタイを無料で生成します。

人気の記事

ホットツール

ドリームウィーバー CS6
ビジュアル Web 開発ツール

SecLists
SecLists は、セキュリティ テスターの究極の相棒です。これは、セキュリティ評価中に頻繁に使用されるさまざまな種類のリストを 1 か所にまとめたものです。 SecLists は、セキュリティ テスターが必要とする可能性のあるすべてのリストを便利に提供することで、セキュリティ テストをより効率的かつ生産的にするのに役立ちます。リストの種類には、ユーザー名、パスワード、URL、ファジング ペイロード、機密データ パターン、Web シェルなどが含まれます。テスターはこのリポジトリを新しいテスト マシンにプルするだけで、必要なあらゆる種類のリストにアクセスできるようになります。

Safe Exam Browser
Safe Exam Browser は、オンライン試験を安全に受験するための安全なブラウザ環境です。このソフトウェアは、あらゆるコンピュータを安全なワークステーションに変えます。あらゆるユーティリティへのアクセスを制御し、学生が無許可のリソースを使用するのを防ぎます。

EditPlus 中国語クラック版
サイズが小さく、構文の強調表示、コード プロンプト機能はサポートされていません

mPDF
mPDF は、UTF-8 でエンコードされた HTML から PDF ファイルを生成できる PHP ライブラリです。オリジナルの作者である Ian Back は、Web サイトから「オンザフライ」で PDF ファイルを出力し、さまざまな言語を処理するために mPDF を作成しました。 HTML2FPDF などのオリジナルのスクリプトよりも遅く、Unicode フォントを使用すると生成されるファイルが大きくなりますが、CSS スタイルなどをサポートし、多くの機能強化が施されています。 RTL (アラビア語とヘブライ語) や CJK (中国語、日本語、韓国語) を含むほぼすべての言語をサポートします。ネストされたブロックレベル要素 (P、DIV など) をサポートします。
