在Linux上面,可以用ipcs的shell指令來觀察目前所有的IPC資源使用情況:
------ Shared Memory Segments --------
key shmid owner perms bytes nattch status
------ Semaphore Arrays --------
key semid owner perms nsems
------ Message Queues --------
key msqid owner perms used-bytes messages
0x000004d2 42631168 root 666 8 1
0x0000270f 42663937 root 666 2080 4
0x0000270e 42401794 root 666 0 0
一些使用法在Google上都可以找到,下面列出一些使用Message queue的重點:
1. 在Message Queue使用上來說,主要是靠一個號碼去跟Kernel要一個新的Message Queue。如果其他的行程也都用這個號碼開啟Message Queue的話,那每個行程都可以看到這個MessageQueue裡的東西。但是Message Queue可以存放著不同的型態的Message,因此各行程可以某個特定的形態去取得特定的Message。所以可以架構成多對多的通訊方式。
2. 如果任一行程將這個號碼的Message Queue做移除的動作,那正在操作Message Queue的行程都會讓msgrecv return -1。此時需要再去做message開啟的動作。
3. 如果msgrecv的返回值為-1而且errno=EINTR,這並不是因為message queue出錯,而是在等待message queue的同時,發生了signal中斷,因此kernel就會讓msgrecv返回-1,並且設定errno=EINTR。所以一定要去判斷errno,到底是為什麼傳回了-1。
沒有留言:
張貼留言