ホームページ  >  記事  >  システムチュートリアル  >  Linux プロセス間で通信する 6 つの方法

Linux プロセス間で通信する 6 つの方法

PHPz
PHPzオリジナル
2024-07-11 21:58:37307ブラウズ
プロセスの概念

プロセスはオペレーティングシステムの概念であり、プログラムを実行するたびに、オペレーティングシステムのプロセスが作成され、リソースが割り当てられ、解放されます。プロセスはプログラムの実行と考えることができます。

プロセスコミュニケーションの概念

プロセス ユーザー スペースは互いに独立しており、通常は相互にアクセスできません。しかし多くの場合、システムの特定の機能を完了するには、プロセスが相互に通信する必要があります。プロセスは、カーネルお​​よび他のプロセスと通信することによって動作を調整します。

プロセス通信の応用シナリオ

データ転送: あるプロセスはそのデータを別のプロセスに送信する必要があり、送信されるデータの量は 1 バイトから数メガバイトの範囲に及びます。

共有データ: 複数のプロセスが共有データを操作したい場合、1 つのプロセスが共有データを変更すると、他のプロセスはそれをすぐに認識する必要があります。

通知イベント: プロセスは、別のプロセスまたはプロセスのグループにメッセージを送信して、特定のイベントが発生したことを通知する必要があります (プロセスの終了時に親プロセスに通知するなど)。

リソース共有: 複数のプロセス間で同じリソースを共有します。これを行うには、カーネルがロックおよび同期メカニズムを提供する必要があります。

プロセス制御: 一部のプロセスは、別のプロセス (デバッグ プロセスなど) の実行を完全に制御したいと考えています。このとき、制御プロセスは、別のプロセスのすべてのトラップと例外をインターセプトし、そのステータスの変化を時間内に把握できることを望んでいます。

プロセス通信の方法

Linux プロセス間で通信する 6 つの方法

1. パイプライン

パイプは名前付きパイプと名前のないパイプに分けられます

名前のないパイプは半二重通信方式であり、データは一方向にのみ流れることができ、アフィニティを持つプロセス間でのみ使用できます。プロセスのアフィニティは通常、親子関係を指します。通常、無知パイプは 2 つの異なるプロセス間の通信に使用されます。プロセスがパイプを作成し、フォークを呼び出して独自の子プロセスを作成すると、親プロセスは読み取りパイプ端を閉じ、子プロセスは書き込みパイプ端を閉じます。これにより、2 つのプロセス間でデータが流れる方法が提供されます。

有名なパイプも半二重通信方式ですが、無関係なプロセス間の通信が可能になります。

2.セマフォ

セマフォは、共有リソースへの複数のスレッドのアクセスを制御するために使用できるカウンターであり、大量のデータの交換には使用されませんが、複数のスレッド間の同期を防ぐためによく使用されます。リソースにアクセスすると、他のプロセスもそのリソースにアクセスするため、主にプロセス間および同じプロセス内の異なるスレッド間の同期手段として使用されます。

Linux は、信号を操作するための適切に設計された一連のセマフォ インターフェイスを提供します。これらの関数は以下で紹介しますが、これらの関数は信号のグループを操作するために使用されることに注意してください。これらはヘッダー ファイル sys/sem.h で宣言されます。

semget関数

その機能は、新しいセマフォを作成するか、既存のセマフォを取得することです

semop関数

その機能はセマフォの値を変更することです

semctl関数

この関数はセマフォ情報を直接制御するために使用されます

3. 信号
シグナルは比較的複雑な通信方法であり、イベントが発生したことを受信プロセスに通知するために使用されます。

4. メッセージキュー

メッセージキューは、カーネルに保存され、メッセージキュー識別子によって識別されるメッセージのリンクされたリストであり、信号送信情報が少なく、パイプラインがフォーマットされていないバイトストリームのみを伝送でき、バッファーが限られているという特性を克服します。メッセージ キューは、UNIX で異なるプロセス間でリソースを共有するためのメカニズムです。UNIX では、メッセージ キューの操作権限を持つプロセスが、msget を使用して、フォーマットされたデータ ストリームを任意のプロセスに送信できます。メッセージキュー 操作制御。メッセージタイプを使用することで、プロセスは任意の順序で情報を読み取ったり、メッセージに優先順位を付けたりできます。

5. 共有メモリ
共有メモリは、他のプロセスがアクセスできるメモリのセクションをマップすることです。この共有メモリは 1 つのプロセスによって作成されますが、複数のプロセスによってアクセスできます。共有メモリは最も高速な IPC (プロセス間通信) 方式です。プロセス間通信は、他のプロセスを対象としており、動作効率が低いように特別に設計されており、プロセス間の同期と通信を実現するために、セマフォなどの他の通信メカニズムと組み合わせて使用​​されることがよくあります。

6. ソケット ソケット、つまりソケットは通信メカニズムです。このメカニズムを使用すると、クライアント/サーバー (つまり、通信するためのプロセス) システムの開発をローカルの単一マシン上またはネットワーク経由で実行できます。つまり、同じコンピュータ上になくても、ネットワークを介して接続されているコンピュータ上のプロセスが通信できるようになります。このため、ソケットはクライアントとサーバーを明確に区別します。

ソケットの特性は、ドメイン、タイプ、プロトコルの 3 つの属性によって決まります。

異なるプロセス間やプロセス間の通信に使用可能

以上がLinux プロセス間で通信する 6 つの方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

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