IPC はプロセス間通信の略です。
この手法により、プロセスが相互に通信できるようになります。
各プロセスには独自のアドレス空間と固有のユーザー空間があるため、プロセスはどのように相互に通信するのでしょうか?
その答えは、メモリ全体にアクセスできる Linux オペレーティング システムの心臓部であるカーネルです。そのため、プロセス間の通信に使用できるスペースを割り当てるようにカーネルに要求できます。
プロセスは、両方のプロセスがアクセスできるファイルを持つことによって通信することもできます。プロセスはファイルを開き、ファイルを読み書きできますが、これには多くの I/O 操作が必要で、時間がかかります。
さまざまなタイプの IPCS
同じコンピュータ内または同じネットワーク内の別のコンピュータ内で、プロセスが別のプロセスと通信できるようにするさまざまな IPC があります。
- パイプstrong> – メッセージを交換することにより、プロセスが相互に通信する方法を提供します。名前付きパイプは、さまざまなコンピューター システムで実行されているプロセスがネットワーク経由で通信する方法を提供します。
- 共有メモリ – プロセスは共有メモリで値を交換できます。 1 つのプロセスが、他のプロセスがアクセスできるメモリの一部を作成します。
- メッセージ キュー – プロセスがデータを保存または取得するメモリ セグメントの構造化された順序付きリストです。
- セマフォ – 同じリソースにアクセスしているプロセスの同期メカニズムを提供します。セマフォではデータは渡されません。共有リソースへのアクセスを調整するだけです。
10 IPCS コマンドの例
ipcs は、プロセス間通信に関する情報を一覧表示するために使用される UNIX / Linux コマンドです。 ipcs コマンドは、System V IPCS (メッセージ キュー、セマフォ、および共有メモリ) に関するレポートを提供します。
IPCS の例 1:すべての IPC 機能を一覧表示する
-a オプションを指定した ipcs コマンドは、現在のプロセスの読み取りアクセス権を持つすべての IPC 機能を一覧表示します。メッセージ キュー、セマフォ、および共有メモリに関する詳細を提供します。
# ipcs -a ------ Shared Memory Segments -------- key shmid owner perms bytes nattch status 0xc616cc44 1056800768 oracle 660 4096 0 0x0103f577 323158020 root 664 966 1 0x0000270f 325713925 root 666 1 2 ------ Semaphore Arrays -------- key semid owner perms nsems 0x0103eefd 0 root 664 1 0x0103eefe 32769 root 664 1 0x4b0d4514 1094844418 oracle 660 204 ------ Message Queues -------- key msqid owner perms used-bytes messages 0x000005a4 32768 root 644 0 0
すべての IPC 施設には、IPC 施設を識別するために使用される一意のキーと識別子があります。
IPCS の例 2:すべてのメッセージ キューを一覧表示する
オプション -q を指定した ipcs は、現在のプロセスが読み取りアクセス権を持つメッセージ キューのみを一覧表示します。
$ ipcs -q ------ Message Queues -------- key msqid owner perms used-bytes messages 0x000005a4 32768 root 644 0 0
IPCS の例 3. すべてのセマフォを一覧表示する
アクセス可能なセマフォを一覧表示するには、ipcs -s オプションを使用します。
# ipcs -s ------ Semaphore Arrays -------- key semid owner perms nsems 0x0103eefd 0 root 664 1 0x0103eefe 32769 root 664 1 0x4b0d4514 1094844418 oracle 660 204
IPCS の例 4. すべての共有メモリを一覧表示する
ipcs コマンドの ipcs -m オプションを使用すると、共有メモリが一覧表示されます。
# ipcs -m ------ Shared Memory Segments -------- key shmid owner perms bytes nattch status 0xc616cc44 1056800768 oracle 660 4096 0 0x0103f577 323158020 root 664 966 1 0x0000270f 325713925 root 666 1 2
IPCS の例 5. IPC 機能に関する詳細情報
ipcs -i オプションは、ipc 機能に関する詳細情報を提供します。
# ipcs -q -i 32768 Message Queue msqid=32768 uid=0 gid=0 cuid=0 cgid=0 mode=0644 cbytes=0 qbytes=65536 qnum=0 lspid=0 lrpid=0 send_time=Not set rcv_time=Not set change_time=Thu Aug 5 13:30:22 2010
オプション -i を -q とともに使用すると、特定のメッセージ キューに関する情報が提供されます。オプション -i を -s とともに使用すると、セマフォの詳細が提供されます。オプション -i に -m を指定すると、共有メモリに関する詳細が表示されます。
IPCS の例 6。IPC 機能の制限を一覧表示
ipcs -l オプションは、各 ipc 機能のシステム制限を示します。
# ipcs -m -l ------ Shared Memory Limits -------- max number of segments = 4096 max seg size (kbytes) = 67108864 max total shared memory (kbytes) = 17179869184 min seg size (bytes) = 1
上記のコマンドは、共有メモリの制限を示します。 -l を -q および -s と組み合わせて、メッセージ キューとセマフォの制限をそれぞれ表示できます。
単一のオプション -l は、3 つの IPC 機能すべてに制限を与えます。
# ipcs -l
IPCS の例 7. IPC 機能の作成者と所有者の詳細を一覧表示する
ipcs -c オプションは、作成者のユーザー ID とグループ ID、および所有者のユーザー ID とグループ ID をリストします。このオプションを -m、-s、および -q と組み合わせて、特定の IPC 機能の作成者の詳細を表示できます。
# ipcs -m -c ------ Shared Memory Segment Creators/Owners -------- shmid perms cuid cgid uid gid 1056800768 660 oracle oinstall oracle oinstall 323158020 664 root root root root 325713925 666 root root root root
IPCS の例 8. 最近 IPC 機能にアクセスしたプロセス ID
ipcs -p オプションは、作成者 ID と、対応する ipc 機能に最近アクセスしたプロセス ID を表示します。
# ipcs -m -p ------ Shared Memory Creator/Last-op -------- shmid owner cpid lpid 1056800768 oracle 16764 5389 323158020 root 2354 2354 325713925 root 20666 20668
-p は、-m、-s、または -q と組み合わせることもできます。
IPCS の例 9. 最終アクセス時間
ipcs -t オプションは、各 ipc ファシリティでの最後の操作時刻を表示します。このオプションを -m、-s、または -q と組み合わせて、特定のタイプの ipc 機能を出力することもできます。メッセージ キューの場合、-t オプションは最後に送信および受信した時刻を表示し、共有メモリの場合は最後にアタッチされた (メモリの一部) およびデタッチされたタイムスタンプを表示し、セマフォの場合は最後の操作と変更された時刻の詳細を表示します。
# ipcs -s -t ------ Semaphore Operation/Change Times -------- semid owner last-op last-changed 0 root Thu Aug 5 12:46:52 2010 Tue Jul 13 10:39:41 2010 32769 root Thu Aug 5 11:59:10 2010 Tue Jul 13 10:39:41 2010 1094844418 oracle Thu Aug 5 13:52:59 2010 Thu Aug 5 13:52:59 2010
IPCS 例 10. 現在の使用状況
-u コマンドを指定した ipcs は、すべての IPC 機能の現在の使用状況を表示します。このオプションを特定のオプションと組み合わせて、特定の IPC 施設のステータスを表示できます。
# ipcs -u ------ Shared Memory Status -------- segments allocated 30 pages allocated 102 pages resident 77 pages swapped 0 Swap performance: 0 attempts 0 successes ------ Semaphore Status -------- used arrays = 49 allocated semaphores = 252 ------ Messages: Status -------- allocated queues = 1 used headers = 0 used space = 0 bytes