プロセスはオペレーティングシステムの概念であり、プログラムを実行するたびに、オペレーティングシステムのプロセスが作成され、リソースが割り当てられ、解放されます。プロセスはプログラムの実行と考えることができます。
プロセス ユーザー スペースは互いに独立しており、通常は相互にアクセスできません。しかし多くの場合、システムの特定の機能を完了するには、プロセスが相互に通信する必要があります。プロセスは、カーネルおよび他のプロセスと通信することによって動作を調整します。
データ転送: あるプロセスはそのデータを別のプロセスに送信する必要があり、送信されるデータの量は 1 バイトから数メガバイトの範囲に及びます。
共有データ: 複数のプロセスが共有データを操作したい場合、1 つのプロセスが共有データを変更すると、他のプロセスはそれをすぐに認識する必要があります。
通知イベント: プロセスは、別のプロセスまたはプロセスのグループにメッセージを送信して、特定のイベントが発生したことを通知する必要があります (プロセスの終了時に親プロセスに通知するなど)。
リソース共有: 複数のプロセス間で同じリソースを共有します。これを行うには、カーネルがロックおよび同期メカニズムを提供する必要があります。
プロセス制御: 一部のプロセスは、別のプロセス (デバッグ プロセスなど) の実行を完全に制御したいと考えています。このとき、制御プロセスは、別のプロセスのすべてのトラップと例外をインターセプトし、そのステータスの変化を時間内に把握できることを望んでいます。
パイプは名前付きパイプと名前のないパイプに分けられます
名前のないパイプは半二重通信方式であり、データは一方向にのみ流れることができ、アフィニティを持つプロセス間でのみ使用できます。プロセスのアフィニティは通常、親子関係を指します。通常、無知パイプは 2 つの異なるプロセス間の通信に使用されます。プロセスがパイプを作成し、フォークを呼び出して独自の子プロセスを作成すると、親プロセスは読み取りパイプ端を閉じ、子プロセスは書き込みパイプ端を閉じます。これにより、2 つのプロセス間でデータが流れる方法が提供されます。
有名なパイプも半二重通信方式ですが、無関係なプロセス間の通信が可能になります。
セマフォは、共有リソースへの複数のスレッドのアクセスを制御するために使用できるカウンターであり、大量のデータの交換には使用されませんが、複数のスレッド間の同期を防ぐためによく使用されます。リソースにアクセスすると、他のプロセスもそのリソースにアクセスするため、主にプロセス間および同じプロセス内の異なるスレッド間の同期手段として使用されます。
Linux は、信号を操作するための適切に設計された一連のセマフォ インターフェイスを提供します。これらの関数は以下で紹介しますが、これらの関数は信号のグループを操作するために使用されることに注意してください。これらはヘッダー ファイル sys/sem.h で宣言されます。semget関数
その機能は、新しいセマフォを作成するか、既存のセマフォを取得することです
semop関数
その機能はセマフォの値を変更することです
semctl関数
この関数はセマフォ情報を直接制御するために使用されます
メッセージキューは、カーネルに保存され、メッセージキュー識別子によって識別されるメッセージのリンクされたリストであり、信号送信情報が少なく、パイプラインがフォーマットされていないバイトストリームのみを伝送でき、バッファーが限られているという特性を克服します。メッセージ キューは、UNIX で異なるプロセス間でリソースを共有するためのメカニズムです。UNIX では、メッセージ キューの操作権限を持つプロセスが、msget を使用して、フォーマットされたデータ ストリームを任意のプロセスに送信できます。メッセージキュー 操作制御。メッセージタイプを使用することで、プロセスは任意の順序で情報を読み取ったり、メッセージに優先順位を付けたりできます。
ソケットの特性は、ドメイン、タイプ、プロトコルの 3 つの属性によって決まります。
異なるプロセス間やプロセス間の通信に使用可能
以上がLinux プロセス間で通信する 6 つの方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。