程序間通訊概述
程序間通訊有如下的目的:1、資料傳輸,乙個程序需要將它的資料傳送給另乙個程序,傳送的資料量在乙個位元組到幾m之間;2、共享資料,多個程序想要操作共享資料,乙個程序對資料的修改,其他程序應該立刻看到;3、通知事件,乙個程序需要向另乙個或一組程序傳送訊息,通知它們發生了某件事情;4、資源共享,多個程序之間共享同樣的資源。為了做到這一點,需要核心提供鎖和同步機制;5、程序控制,有些程序希望完全控制另乙個程序的執行(如debug程序),此時控制程序希望能夠攔截另乙個程序的所有陷入和異常,並能夠及時知道它的狀態改變。
linux程序間通訊由以下幾部分發展而來:
早期unix程序間通訊:包括管道、fifo、訊號。
基於system v的程序間通訊:包括system v訊息佇列、system v訊號燈(semaphore)、system v共享記憶體。
基於socket程序間通訊。
基於posix程序間通訊:包括posix訊息佇列、posix訊號燈、posix共享記憶體。
linux中,與ipc相關的命令包括:ipcs、ipcrm(釋放ipc)、
ipcs命令是linux下顯示程序間通訊設施狀態的工具。我們知道,系統進行程序間通訊(ipc)的時候,可用的方式包括訊號量、共享記憶體、訊息佇列、管道、訊號(signal)、套接字等形式[2]。使用ipcs可以檢視共享記憶體、訊號量、訊息佇列的狀態。
例如在centos6.0上執行ipcs
其中:第一列就是共享記憶體的key;
第二列是共享記憶體的編號shmid;
第三列就是建立的使用者owner;
第四列就是許可權perms;
第五列為建立的大小bytes;
第六列為連線到共享記憶體的程序數nattach;
第七列是共享記憶體的狀態status。其中顯示「dest」表示共享記憶體段已經被刪除,但是還有使用者在使用它,當該段記憶體的mode欄位設定為 shm_dest時就會顯示「dest」。當使用者呼叫shmctl的ipc_rmid時,記憶體先檢視多少個程序與這個記憶體關聯著,如果關聯數為0,就會銷 毀這段共享記憶體,否者設定這段記憶體的mod的mode位為shm_dest,如果所有程序都不用則刪除這段共享記憶體。
具體的用法總結如下:
1、顯示所有的ipc設施
# ipcs -a
2、顯示所有的訊息佇列message queue
# ipcs -q
3、顯示所有的訊號量
# ipcs -s
4、顯示所有的共享記憶體
# ipcs -m
5、顯示ipc設施的詳細資訊
# ipcs -q -i id
id 對應shmid、semid、msgid等。-q對應設施的型別(佇列),檢視訊號量詳細情況使用-s,檢視共享記憶體使用-m。
6、顯示ipc設施的限制大小
# ipcs -m -l
-m對應設施型別,可選引數包括-q、-m、-s。
7、顯示ipc設施的許可權關係
# ipcs -c
# ipcs -m -c
# ipcs -q -c
# ipcs -s -c
8、顯示最近訪問過ipc設施的程序id。
# ipcs -p
# ipcs -m -p
# ipcs -q -p
9、顯示ipc設施的最後操作時間
# ipcs -t
# ipcs -q -t
# ipcs -m -t
# ipcs -s -t
10、顯示ipc設施的當前狀態
# ipcs -u
linux上的ipcs命令,不支援unix上的-b、-o指令,同樣unix中不支援-l、-u指令,所以在編寫跨平台的指令碼時,需要注意這個問題。
下面的命令可以釋放所有已分配的共享記憶體:
ipcs -m | awk '$2 ~ /[0-9]+/ ' | while read s; do sudo ipcrm -m $s; done
Linux ipcs 命令詳解
在unix linux下,經常有因為共享記憶體 訊號量,佇列等共享資訊沒有乾淨地清楚而引起一些問題,ipcs缺省會列出共享記憶體 訊號量,佇列資訊,m列出共享記憶體,s列出共享訊號量,q列出共享佇列。root localhost ipcs shared memory segments key shm...
Linux ipcs命令與ipcrm命令的用法詳解
以下是對linux中的ipcs命令與ipcrm命令的用法進行了介紹,需要的朋友可以過來參考下 是linux uinx上提供關於一些程序間通訊方式的資訊,包括共享記憶體,訊息佇列,訊號 ipcs用法 ipcs a 是預設的輸出資訊 列印出當前系統中所有的程序間通訊方式的資訊 ipcs m 列印出使用共...
Linux ipcs命令及ipcrm命令的用法
是linux uinx上提供關於一些程序間通訊方式的資訊,包括共享記憶體,訊息佇列,訊號 ipcs用法 ipcs a 是預設的輸出資訊 列印出當前系統中所有的程序間通訊方式的資訊 ipcs m 列印出使用共享記憶體進行程序間通訊的資訊 ipcs q 列印出使用訊息佇列進行程序間通訊的資訊 ipcs ...