2

この質問は、言語と接続方法に依存しないことを意図しています。実際に方法を見つけることが問題です。シェルのように呼び出しを介して 2 つのプロセスを直接パイプできることは知っていますし、prog1 | prog2RPC とソケットについて読んだこともあります。しかし、すべてが少し抽象的すぎて、実際に把握することはできませんでした. たとえば、ソケットがどのように作成されるか、各プロセスがソケットを作成する必要があるかどうか、または多くのプロセスが同じソケットを使用してメッセージを相互に転送できるかどうか、またはソケットを完全に削除できるかどうかは明確ではありません。

Linux のプロセス間通信が実際にどのように機能し、どのようなオプションがあるかを誰か説明できますか?

4

2 に答える 2

2

パイプ

生産者と消費者のシナリオでは、パイプを使用できます。これは IPC です。パイプはその名の通り、シンクとソースを接続します。シェルでは、ソースは標準出力であり、シンクは標準入力です。cmd2 は、cmd1 の出力を cmd2 の入力に接続するだけです。

パイプを使用して、2 つのファイル記述子を作成します。1 つをシンク用に、もう 1 つをソース用に使用できます。パイプが作成されたら、フォークすると、1 つのプロセスがファイル記述子の 1 つを使用し、もう 1 つのプロセスがもう 1 つのファイル記述子を使用します。

その他のIPC

IPC にはさまざまなものがあります。パイプ (メモリ内)、名前付きパイプ (ファイル経由)、ソケット、共有メモリ、セマフォ、メッセージ キュー、シグナルなどです。すべてに長所と短所があります。それらに関する多くの文献がオンラインや本にあります。ここでそれらすべてを説明するのは難しいでしょう。

基本的に、各プロセスには、他のプロセスから分離された独自のメモリがあることを理解する必要があります。したがって、データを交換するための共有リソースを見つける必要があります。リソースは、ネットワーク (ソケットの場合) やマスストレージ (ファイルの場合) のような「物理的」なものと、パイプやシグナルのような「抽象的」なものがあります。

于 2012-05-21T10:55:42.413 に答える
1

プロセスの 1 つがプロデューサーで、もう 1 つがコンシューマーである場合、共有メモリ通信を行うことができます。これにはセマフォが必要です。1 つのプロセスがセマフォをロックして共有メモリに書き込み、別のプロセスがセマフォをロックして値を読み取ります。セマフォを使用するため、ダーティな読み取り/書き込みが処理されます。

于 2012-05-16T08:56:02.967 に答える