System v ipc的缺點:
當進程結束時,不會自動刪除進程通信的內核對象,並且能夠使用ipcs命令查看內核對象,如下:
由於進程通信內核對象也屬於操作系統的資源,如果長期佔用並且不使用確實是對操作系統資源的浪費,因此對於不再使用的進程通信內核對象應當及時刪除,那麼如何刪除呢?
(1)重啓OS,沒啥大毛病,但是不方便。
(2)當進程使用完畢後,調用相應的系統API進行刪除,當然這裏需要注意的是調用的時機,必須是使用完成後。
(3)使用ipcs命令,是相對簡單可行的方法:
(1)刪除消息隊列
ipcrm -Q key //按照key刪除
ipcrm -q msgid //按照msgid刪除
(2)刪除共享內存
ipcrm -M key //按照key刪除
ipcrm -m msgid //按照標識符刪除
(3)刪除信號量
ipcrm -S key //按照key刪除
ipcrm -s msgid //按照標識符刪除
舉例分別按key刪除和按msgid刪除的消息隊列的過程: