GNU/Linux >> Linux の 問題 >  >> Linux

Linuxでのプロセス間通信のガイドを紹介します

あるソフトウェアプロセスを別のソフトウェアプロセスと通信させることは、微妙なバランスを取る行為です。ただし、これはアプリケーションにとって不可欠な機能である可能性があるため、複雑なプロジェクトに着手するプログラマーが解決しなければならない問題です。アプリケーションが他の誰かのソフトウェアによって処理されているジョブを開始する必要があるかどうか。周辺機器またはネットワークを介して実行されているアクションを監視するため。または、他のソースからの信号を検出するために、ソフトウェアが次に何をすべきか、いつそれを行うべきかを知るために独自のコード以外の何かに依存している場合、プロセス間通信(IPC)について考える必要があります。

その他のLinuxリソース

  • Linuxコマンドのチートシート
  • 高度なLinuxコマンドのチートシート
  • 無料のオンラインコース:RHELの技術概要
  • Linuxネットワーキングのチートシート
  • SELinuxチートシート
  • Linuxの一般的なコマンドのチートシート
  • Linuxコンテナとは何ですか?
  • 最新のLinux記事

Unixオペレーティングシステムは、おそらくソフトウェアがさまざまなソースから発信されるとの初期の予想のために、これをずっと前に説明しました。同じ伝統で、LinuxはIPCといくつかの新しいインターフェースに同じインターフェースの多くを提供します。 LinuxカーネルはいくつかのIPCメソッドを備えており、util-linuxパッケージには ipcmkが含まれています。 、 ipcrm ipcs 、および lsipc IPCメッセージを監視および管理するためのコマンド。

IPC情報を表示する

IPCを試す前に、システムにすでにどのIPC機能があるかを知っておく必要があります。 lsipc コマンドはその情報を提供します。

RESOURCE DESCRIPTION               LIMIT  USED  USE%
MSGMNI   Number of message queues  32000     0 0.00%
MSGMAX   Max size of message (byt.. 8192     -     -
MSGMNB   Default max size of queue 16384     -     -
SHMMNI   Shared memory segments     4096    79 1.93%
SHMALL   Shared memory pages       184[...] 25452 0.00%
SHMMAX   Max size of shared memory 18446744073692774399
SHMMIN   Min size of shared memory     1     -     -
SEMMNI   Number of semaphore ident 32000     0 0.00%
SEMMNS   Total number of semaphore 1024000.. 0 0.00%
SEMMSL   Max semaphores per semap  32000     -     -
SEMOPM   Max number of operations p  500     -     -
SEMVMX   Semaphore max value       32767     -     -

このサンプルリストには、メッセージ(MSG)、共有メモリ(SHM)、およびセマフォ(SEM)の3種類のIPCメカニズムが含まれています。それぞれがLinuxカーネルで使用できます。 ipcs を使用して、これらの各サブシステムの現在のアクティビティを表示できます。 コマンド:

$ ipcs 

------ Message Queues Creators/Owners ---
msqid     perms     cuid      cgid  [...]

------ Shared Memory Segment Creators/Owners
shmid     perms    cuid    cgid  [...]
557056    700      seth    users [...]
3571713   700      seth    users [...]
2654210   600      seth    users [...]
2457603   700      seth    users [...]

------ Semaphore Arrays Creators/Owners ---
semid     perms     cuid      cgid  [...]

これは、現在メッセージまたはセマフォ配列がないことを示していますが、いくつかの共有メモリセグメントが使用されています。

これらのシステムの1つが機能していることを確認できるように、システムで実行できる簡単な例があります。これにはいくつかのCコードが含まれるため、システムにビルドツールが必要です。ソースコードからビルドできるようにするためにインストールする必要のあるパッケージの名前は、ディストリビューションによって異なるため、詳細についてはドキュメントを参照してください。たとえば、Debianベースのディストリビューションでは、WikiのBuildingTutorialセクションでビルド要件について学ぶことができます。また、Fedoraベースのディストリビューションでは、ドキュメントのソースセクションからのソフトウェアのインストールを参照してください。

メッセージキューを作成する

システムにはすでにデフォルトのメッセージキューがありますが、 ipcmkを使用して独自のメッセージキューを作成できます コマンド:

$ ipcmk --queue
Message queue id: 32764

簡単にするためにキューIDにハードコーディングして、簡単なIPCメッセージ送信者を記述します。

#include <sys/ipc.h>
#include <sys/msg.h>
#include <stdio.h>
#include <string.h>

struct msgbuffer {
  char text[24];
} message;

int main() {
    int msqid = 32764;
    strcpy(message.text,"opensource.com");
    msgsnd(msqid, &message, sizeof(message), 0);
    printf("Message: %s\n",message.text);
    printf("Queue: %d\n",msqid);
    return 0;
        }

アプリケーションをコンパイルして実行します:

$ gcc msgsend.c -o msg.bin
$ ./msg.bin
Message: opensource.com
Queue: 32769

メッセージキューにメッセージを送信しました。 ipcsで確認できます コマンド、-queueを使用 メッセージキューへの出力を制限するオプション:

$ ipcs -q

------ Message Queues --------
key        msqid   owner  perms  used-bytes  messages
0x7b341ab9 0       seth   666    0          0
0x72bd8410 32764   seth   644    24         1

これらのメッセージは、次のコマンドで取得することもできます:

#include <sys/ipc.h>
#include <sys/msg.h>
#include <stdio.h>

struct msgbuffer {
    char text[24];
} message;

int main() {
    int msqid = 32764;
    msgrcv(msqid, &message, sizeof(message),0,0);
    printf("\nQueue: %d\n",msqid);
    printf("Got this message: %s\n", message.text);
    msgctl(msqid,IPC_RMID,NULL);
    return 0;

コンパイルして実行する:

$ gcc get.c -o get.bin
$ ./get.bin

Queue: 32764
Got this message: opensource.com
電子書籍をダウンロード

これは、Opensource.comからダウンロード可能な最新の無料(およびクリエイティブコモンズ)の電子書籍である、Linuxでのプロセス間通信に関するMartyKalinのガイドで利用できるレッスンの一例にすぎません。ほんの数回の短いレッスンで、メッセージキュー、共有メモリとセマフォ、ソケット、信号などからIPCのPOSIXメソッドについて学習します。マーティの本に腰を下ろすと、知識の豊富なプログラマーが現れます。ただし、これは経験豊富なコーダーだけのものではありません。シェルスクリプトだけを作成する場合は、パイプ(名前付きおよび名前なし)と共有ファイルに関する実践的な知識が豊富にあり、共有ファイルを使用するときに知っておく必要のある重要な概念もあります。または外部メッセージキュー。

動的でシステムに対応するように作成された優れたソフトウェアの作成に興味がある場合は、IPCについて知っておく必要があります。この本をガイドにしてください。


Linux
  1. 初心者向けのLinuxターミナルガイド

  2. Linuxでのプロセス間通信:ソケットとシグナル

  3. Linuxでのプロセス間通信:パイプとメッセージキューの使用

  1. Linuxでのプロセス間通信:共有ストレージ

  2. LinuxでのLVMの完全な初心者向けガイド

  3. Linux の「検索」コマンドのガイド

  1. Linuxツール:dmesgを使用してメッセージを出力する

  2. Linuxの「トップ」コマンドのガイド

  3. Linux/UNIX の [新しいメールがあります] メッセージは何ですか?