linux中ipcs命令與ipcrm命令


摘自http://www.cnblogs.com/cocowool/archive/2012/05/22/2513027.html

參考:http://blog.csdn.net/dlutbrucezhang/article/details/8639185

         http://www.jb51.net/article/40805.htm

 

進程間通信概述

進程間通信有如下的目的: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

image

其中:

第一列就是共享內存的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]+/ {print $2}' | while read s; do sudo ipcrm -m $s; done


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM