Linux プロセス間の 3 つの通信方法は何ですか?
Linux プロセス間で通信する 3 つの方法: 1. パイプ通信: 情報を送信するプロセスは書き込みプロセスと呼ばれ、情報を受信するプロセスは読み取りプロセスと呼ばれます。 2. メッセージバッファ通信は、メッセージバッファを中間媒体として使用し、通信双方の送受信動作はメッセージに基づいて行われます。 3. 共有メモリ通信。
このチュートリアルの動作環境: Ubuntu 16.04 システム、Dell G3 コンピューター。
Linux におけるプロセス間通信の 3 つの方法
異なるプロセスは異なるメモリ空間で実行されるためです。一方の当事者による変数の変更は、他方の当事者には見えません。したがって。プロセス間の情報転送は、変数やその他のデータ構造を通じて直接実行することはできず、プロセス間通信を通じてのみ実現できます。
プロセス通信は、プロセス通信時の情報量の違いにより、制御情報の通信と大量のデータ情報の通信の2つに大きく分けられます。前者を低レベル通信、後者を高レベル通信と呼びます。
低レベル通信は、主にプロセス間の同期、排他、終了、一時停止などの制御情報の伝達に使用されます。
高度な通信は、主にプロセス間のデータ ブロックの交換と共有に使用されます。一般的な高度な通信には、パイプライン (PIPE)、メッセージ キュー (MESSAGE)、共有メモリ (SHARED MEM0RY) などが含まれます。
ここでは、主にこれら 3 つの高度なコミュニケーション方法の特徴を比較します。
パイプ通信 (PIPE)
2 つのプロセスがパイプを使用して通信する場合。情報を送信するプロセスは書き込みプロセスと呼ばれます。情報を受信するプロセスは読み取りプロセスと呼ばれます。パイプライン通信の中間媒体はファイルです。この種のファイルは通常、パイプライン ファイルと呼ばれます。書き込みプロセスと読み取りプロセスをパイプのように接続し、2 つのプロセス間の通信を実現します。書き込みプロセスは、書き込み側(送信側)を通じてパイプ ファイルに情報を書き込み、読み取りプロセスは、読み取り側(受信側)を通じてパイプ ファイルから情報を読み取ります。 2 つのプロセスは連携して継続的に書き込みと読み取りを行い、双方がパイプを介して情報を転送するパイプラインを形成します。
システム コール PIPE() を使用して、通常は名前なしパイプまたは PIPE と呼ばれる名前のないパイプ ファイルを作成します。名前付きパイプ ファイルを作成するには、システム コール MKNOD() を使用します。名前付きパイプまたは FIFO と呼ばれることがよくあります。匿名パイプは、非永続的なパイプ通信メカニズムです。アクセスしたすべてのプロセスが終了すると元に戻ります。名前のないパイプは、ファミリー関係のあるプロセス間でのみ使用できます。既知のパイプはシステム内に長期間存在する可能性があります。また、あらゆる関係のプロセスで使用するために提供されていますが、不適切に使用すると簡単にエラーが発生する可能性があります。したがって、オペレーティング システムは、名前付きパイプの管理権限を制御のためにシステムに渡します。パイプ ファイルの作成後、システム コール WRITE() および READ(); によってパイプ上の読み取りおよび書き込み操作を実現できます。通信が完了すると、CLOSE() を使用してパイプライン ファイルを閉じることができます。
メッセージ バッファ通信 (MESSAGE)複数の独立したプロセスは、メッセージ バッファ メカニズムを通じて相互に通信できます。この種の通信は、メッセージバッファを中間媒体として実現されます。通信する双方の当事者の送受信操作はメッセージに基づいて行われます。メモリ内では、メッセージ バッファはキューに編成され、メッセージ キューとも呼ばれます。メッセージ キューを作成すると、複数のプロセスで共有できます。メッセージを送信するプロセスは、いつでも指定されたメッセージ キューに任意の数のメッセージを送信し、送信するメッセージを待機している受信プロセスが存在するかどうかを確認できます。存在する場合は、それを起動します。すると、メッセージを受信するプロセスは、メッセージが必要なときに、指定されたメッセージ キューからメッセージを取得できます。ニュースがまだ来ていない場合。その後スリープ状態になって待機します。
共有メモリ通信 (SHARED MEMORY)メッセージのコピーに CPU を必要とするメッセージ バッファリングの欠点を考慮して。 OS は、名前が示すように、プロセス間で直接データを交換するための通信手段、つまり共有メモリを提供します。この通信方法では、外部通信プロトコルまたは同期および相互排他メカニズムのサポートにより、複数のプロセスが同じメモリ セグメントを (中間媒体として) 使用して通信できるようになります。最も効率的なデータ通信方式の一つで、中間リンクが存在しないのが特徴です。共有メモリ ページを介して直接接続します。相互に通信するプロセスのそれぞれの仮想アドレス空間にマッピングします。これにより、複数のプロセスが同じ物理メモリ ページに直接アクセスできるようになります。それは自分のプライベートスペースにアクセスするようなものです(ただし、実際にはプライベートではなく共有されています)。したがって、このプロセス間通信方法は、同じコンピュータ システム内のプロセス間の通信を実現する最速の方法です。そしてそこにその限界があります。つまり、メモリを共有するプロセスは同じコンピュータ システム内に共存する必要があります。共有できるのは物理メモリのみです。
3 つの方法の特徴 (長所と短所): 1. 名前のないパイプはシンプルで便利です。ただし、それは一方向通信の動作モードに限定されます。また、名前付きパイプは、どのような関係のプロセスにも提供できますが、パイプの共有は、パイプを作成したプロセスとその子孫プロセスの間でのみ実現できます。ただし、システムに長期間存在するため、不適切に使用するとエラーが発生する可能性があります。
2. メッセージのバッファリングは親子プロセスに限定されなくなりました。これにより、任意のプロセスが共有メッセージ キューを介してプロセス間通信を実現できるようになります。そして、システムはメッセージの送受信間の同期を実現するために関数を呼び出します。その結果、ユーザーは通信にメッセージ バッファーを使用するときに同期の問題を考慮する必要がなくなりました。使い方は簡単ですが、情報のコピーには追加の CPU 時間が必要です。情報量が多い場合や操作を頻繁に行う場合には不向きです。
3. 共有メモリは、メッセージ バッファの欠点を補うために、メモリ バッファを利用して直接情報を交換するため、コピーが不要で、速度と情報量が多いという利点があります。ただし、共有メモリ通信は、共有メモリ バッファをプロセスの仮想アドレス空間に直接接続することによって実現されます。したがって、これらのプロセス間の読み取りおよび書き込み操作の同期の問題は、オペレーティング システムでは実現できません。これは、他の同期ツールを使用して各プロセスで解決する必要があります。さらに、メモリエンティティはコンピュータシステム内に存在するため。したがって、同じコンピュータ システム内のプロセス間でのみ共有できます。ネットワーク通信には不便です。
関連する推奨事項: 「Linux ビデオ チュートリアル 」
以上がLinux プロセス間の 3 つの通信方法は何ですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

ホットAIツール

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

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

Undress AI Tool
脱衣画像を無料で

Clothoff.io
AI衣類リムーバー

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

人気の記事

ホットツール

メモ帳++7.3.1
使いやすく無料のコードエディター

SublimeText3 中国語版
中国語版、とても使いやすい

ゼンドスタジオ 13.0.1
強力な PHP 統合開発環境

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

SublimeText3 Mac版
神レベルのコード編集ソフト(SublimeText3)

ホットトピック









Linuxでnginxを開始する手順:nginxがインストールされているかどうかを確認します。 systemctlを使用して、nginxを開始してnginxサービスを開始します。 SystemCTLを使用して、NGINXがシステムスタートアップでNGINXの自動起動を有効にすることができます。 SystemCTLステータスNGINXを使用して、スタートアップが成功していることを確認します。 Webブラウザのhttp:// localhostにアクセスして、デフォルトのウェルカムページを表示します。

nginxが開始されるかどうかを確認する方法:1。コマンドラインを使用します:SystemCTLステータスnginx(Linux/unix)、netstat -ano | FindStr 80(Windows); 2。ポート80が開いているかどうかを確認します。 3.システムログのnginx起動メッセージを確認します。 4. Nagios、Zabbix、Icingaなどのサードパーティツールを使用します。

Linuxでは、次のコマンドを使用して、nginxが起動されるかどうかを確認します。SystemCTLステータスNGINXコマンド出力に基づいて、「アクティブ:アクティブ(実行)」が表示された場合、NGINXが開始されます。 「アクティブ:非アクティブ(dead)」が表示されると、nginxが停止します。

サーバーには、要求されたリソースにアクセスする許可がなく、NGINX 403エラーが発生します。ソリューションには以下が含まれます。ファイル許可を確認します。 .htaccess構成を確認してください。 nginx構成を確認してください。 SELINUXアクセス許可を構成します。ファイアウォールルールを確認してください。ブラウザの問題、サーバーの障害、その他の可能なエラーなど、他の原因をトラブルシューティングします。

Centosとubuntuの重要な違いは次のとおりです。起源(CentosはRed Hat、for Enterprises、UbuntuはDebianに由来します。個人用のDebianに由来します)、パッケージ管理(CentosはYumを使用し、安定性に焦点を当てます。チュートリアルとドキュメント)、使用(Centosはサーバーに偏っています。Ubuntuはサーバーやデスクトップに適しています)、その他の違いにはインストールのシンプルさが含まれます(Centos is Thin)

DockerはLinuxカーネル機能を使用して、効率的で孤立したアプリケーションランニング環境を提供します。その作業原則は次のとおりです。1。ミラーは、アプリケーションを実行するために必要なすべてを含む読み取り専用テンプレートとして使用されます。 2。ユニオンファイルシステム(UnionFS)は、違いを保存するだけで、スペースを節約し、高速化する複数のファイルシステムをスタックします。 3.デーモンはミラーとコンテナを管理し、クライアントはそれらをインタラクションに使用します。 4。名前空間とcgroupsは、コンテナの分離とリソースの制限を実装します。 5.複数のネットワークモードは、コンテナの相互接続をサポートします。これらのコア概念を理解することによってのみ、Dockerをよりよく利用できます。

Centosは、上流の分布であるRhel 8が閉鎖されたため、2024年に閉鎖されます。このシャットダウンはCentos 8システムに影響を与え、更新を継続し続けることができません。ユーザーは移行を計画する必要があり、提案されたオプションには、Centos Stream、Almalinux、およびRocky Linuxが含まれ、システムを安全で安定させます。

質問:nginxを開始する方法は?回答:nginxスタートアップnginx検証nginxはnginxを開始しました他のスタートアップオプションを自動的に開始
