Linux共享內存的管理

在進程通訊應用中會用到共享內存,這就涉及到了IPC,與IPC相關的命令包括:ipcs、ipcrm(釋放IPC)。IPCS命令是Linux下顯示進程間通訊設施狀態的工具。咱們知道,系統進行進程間通訊(IPC)的時候,可用的方式包括信號量、共享內存、消息隊列、管道、信號(signal)、套接字等形式[2]。使用IPCS能夠查看共享內存、信號量、消息隊列的狀態。工具

當下系統是Centos,執行ipcs命令查看spa

說明:code

  • 第一列就是共享內存的key;
  • 第二列是共享內存的編號shmid;
  • 第三列就是建立的用戶owner;
  • 第四列就是權限perms;
  • 第五列爲建立的大小bytes;
  • 第六列爲鏈接到共享內存的進程數nattach;
  • 第七列是共享內存的狀態status。其中顯示「dest」表示共享內存段已經被刪除,可是還有用戶在使用它,當該段內存的mode字段設置爲 SHM_DEST時就會顯示「dest」。當用戶調用shmctl的IPC_RMID時,內存先查看多少個進程與這個內存關聯着,若是關聯數爲0,就會銷 毀這段共享內存,否者設置這段內存的mod的mode位爲SHM_DEST,若是全部進程都不用則刪除這段共享內存。

具體的用法總結以下:
一、顯示全部的IPC設施blog

# ipcs -a

二、顯示全部的消息隊列Message Queue隊列

# ipcs -q

三、顯示全部的信號量進程

# ipcs -s

四、顯示全部的共享內存ip

# ipcs -m

五、顯示IPC設施的詳細信息內存

# ipcs -q -i id

id 對應shmid、semid、msgid等。-q對應設施的類型(隊列),查看信號量詳細狀況使用-s,查看共享內存使用-m。消息隊列

六、顯示IPC設施的限制大小class

# ipcs -m -l

-m對應設施類型,可選參數包括-q、-m、-s。

七、顯示IPC設施的權限關係

# ipcs -c # ipcs -m -c # ipcs -q -c # ipcs -s -c

八、顯示最近訪問過IPC設施的進程ID。

# ipcs -p # ipcs -m -p # ipcs -q -p

九、顯示IPC設施的最後操做時間

# ipcs -t # ipcs -q -t # ipcs -m -t # ipcs -s -t

十、顯示IPC設施的當前狀態

# ipcs -u

Linux上的ipcs命令,不支持UNIX上的-b、-o指令,一樣UNIX中不支持-l、-u指令,因此在編寫跨平臺的腳本時,須要注意這個問題。

刪除IPC

ipcrm -m| -q| -s shm_id

例如,咱們在以0x12345678爲KEY建立了一個共享內存,能夠直接使用ipcrm -M 0x12345678來刪除共享內存區域。

下面的命令能夠釋放全部已分配的共享內存:

ipcs -m | awk '$2 ~ /[0-9]+/ {print $2}' | while read s; do sudo ipcrm -m $s; done
相關文章
相關標籤/搜索