linux ipcs命令詳解

2021-08-19 19:11:11 字數 2039 閱讀 2755

程序間通訊概述

程序間通訊有如下的目的: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 ...