Content-Description: [** BIG-5 charset **] [GNU/Linux] ipcs -- 檢視 shm 的?穈T
[GNU/Linux] ipcs -- 檢視 shm 的資訊
/ 前言 /
IPC -- Inter Proccess Channel,是在以 System V 系統上提供 個行程間溝通的方式之一。利用記憶體中 Shared Memory,Semaphore Array 和 Message Queue 來提供行程間通訊的管道。常見的例子 如一服務級行程所衍生的眾多子行程,可透過 IPC 的機制來互相 溝通。
ipcs -- 這是一隻在 Linux console 下的檢視 Shared Memory, Semaphore Array 和 Message Queue 的使用情況。當得知這些相 關資訊之後,管理者可以利用如 ipcrm 的程式來加以管理。ipcs 的作者是krishna balasubramanian(balasub@cis.ohio-state.edu) 。
/ 路徑 /
以筆者安裝的 RedHat Linux 7.0 為例,ipcs 是放置在 /usr/bin 下。
/ 所使用的 shared library /
在筆者所使用的 RedHat Linux 7.0 下,ipcs 所使用到的 shared library 有 libc.so, ld-linux.so。
/ 使用說明及範例 /
在 console 下直接下命令 ipcs 不加任何參數,會得到最基本資 訊的輸出:
[root]# ipcs
------ Shared Memory Segments |
|
|||
key shmid | owner | perms | bytes | nattch status |
0x00000bb7 0 | bbs | 600 | 111312 | 25 |
0x000007ce 1 | bbs | 600 | 143240 | 26 |
0x00000bb5 2 | bbs | 600 | 40968 | 25 |
0x00000000 2051 | bbs | 600 | 46084 | 11 dest |
0x00280267 4 | root | 644 | 1048576 | 0 |
------ Semaphore | Arrays ----- | - | ||
key semid | owner | perms | nsems | status |
0x00280269 0 | root | 666 | 14 | |
------ Message Queues ------- | ||||
key msqid | owner | perms | used-bytes messages |
我們可以注意到的是,Shared Memory Segments, Semaphore Arrays, Message Queues 都有一個 perms 的欄位,其表示法同檔案權限 的表示法,如 600 表示只有 owner 可以讀寫,同群組人與其他 人則不能讀也不能寫;644 則表示 owner 可以讀寫,同群組人與 其他人則只能讀但不能寫。因此當我們以一般 user 執行 ipcs 所看到的輸出會與以 super user 執行的輸出不同:
[gjchen]$ ipcs
------ Shared Memory Segments |
|
|
key shmid owner | perms | bytes nattch status |
0x00280267 4 root | 644 | 1048576 0 |
------ Semaphore Arrays ----- | -- | |
key semid owner | perms | nsems status |
0x00280269 0 root ------ Message Queues ------- |
666 | 14 |
key msqid owner | perms | used-bytes messages |
如上所示,以其他帳號執行 ipcs 所看到的輸出只剩下 perms 為 644 和 666 的資訊了。
如果管理者只需要檢視 Shared Memory Segments, Semaphore Arrays 與 Message Queues 的資訊其中之一,則可與參數 -m -s -q 分開或合併使用。
-m:顯示 Shared Memory Segments 的資訊。 -s:顯示 Semaphore Arrays 的資訊。 -q:顯示 Message Queues 的資訊。
如以下是 ipcs -mq 的輸出結果:
[root]# ipcs -mq
------ Shared Memory Segments |
|
||
key shmid owner | perms | bytes nattch status | |
0x00000bb7 0 bbs | 600 | 111312 | 26 |
0x000007ce 1 bbs | 600 | 143240 | 27 |
0x00000bb5 2 bbs | 600 | 40968 | 26 |
0x00000000 2051 bbs | 600 | 46084 | 11 dest |
0x00280267 4 root ------ Message Queues ------- |
644 | 1048576 | 0 |
key msqid owner | perms | used-bytes | messages |
如上就只輸出 Shared Memory Segments 與 Message Queues 的 資訊。
而更詳細的 ipcs 輸出資訊,可以包括下面五項:
參數| 顯示資訊
-t | shm 的 Attache, Detache, Change 時間 (與 -m 合用)
| shm 的 last Operation, last Change 時間 (與 -s 合用) | Message Queues 的 Send, Recv, Change 時間 (與 -q 合用)
-p | shm 的 Creator 和 Last-op 的 PID (與 -m 合用)
| 使用 Message Queues 的 PIDs (與 -q 合用)
-c | shm 的 Creator 和 Owner (與 -m 合用)
| Semaphore Arrays 的 Creator 和 Owner (與 -s 合用) | Message Queues 的 Creator 和 Owner (與 -q 合用)
-l | Shared Memory 的最大與最小限制 (與 -m 合用)
| Semaphore 的最大與最小限制 (與 -s 合用) | Messages 的最大與最小限制 (與 -q 合用)
-u | Shared Memory(-m), Semaphore(-s), Messages(-q) 的狀態
例如想看看目前所有使用 Shared Memory 的片段分別是由誰所建立 和屬於誰的,可以使用 ipcs -m -c 來得到資訊:
[root]# ipcs -m -c
|
Shared Memory Segment | Creators/Owners | --- | ||
shmid | perms | cuid | cgid | uid | gid |
0 | 600 | bbs | bbs | bbs | bbs |
1 | 600 | bbs | bbs | bbs | bbs |
2 | 600 | bbs | bbs | bbs | bbs |
2051 | 600 | root | root | bbs | bbs |
4 | 644 | root | root | root | root |
在以上的幾個例子中,我們可以發現 Shared Memory Segment, Semaphore Array 和 Message Queues 分別有 shmid, semid 及 msqid 欄位記載著各個片段的 ID,而我們可以使用 -i ID 這個 參數來得到關於某項 Shared Memory Segment, Semaphore Array 和 Message Queues 更詳細的資訊。如想檢視 shmid 為 0 的 Shared Memory Segment 的詳細資訊,使用 ipcs -m -i 0 得到 輸出如下:
[root]# ipcs -m -i 0
Shared memory Segment shmid=0
uid=9999 gid=99 cuid=9999 cgid=99
mode=0600 access_perms=0600
bytes=111312 lpid=7274 cpid=675 nattch=24
att_time=Thu Oct 4 14:01:05 2001
det_time=Thu Oct 4 14:01:05 2001
change_time=Mon Sep 17 21:52:52 2001
如想檢視 semid 為 0 的 Semaphore Array 的詳細資訊,使用 ipcs -s -i 0 得到輸出如下:
[root]# ipcs -s -i 0
Semaphore Array | semid=0 | |||
uid=0 | gid=0 | cuid=0 cgid=0 | ||
mode=0666, access_perms=0666 | ||||
nsems = | 14 | |||
otime = | Thu Oct | 4 13:50:17 | 2001 | |
ctime = | Thu Oct | 4 13:50:17 | 2001 | |
semnum | value | ncount | zcount | pid |
0 | 1 | 0 | 0 | 6392 |
1 | 1 | 0 | 0 | 4256 |
2 | 1 | 0 | 0 | 4256 |
3 | 1 | 0 | 0 | 4256 |
4 | 1 | 0 | 0 | 4256 |
5 | 1 | 0 | 0 | 24161 |
6 | 1 | 0 | 0 | 24161 |
7 | 1 | 0 | 0 | 24161 |
8 | 1 | 0 | 0 | 24161 |
9 | 1 | 0 | 0 | 4256 |
10 | 1 | 0 | 0 | 4256 |
11 | 1 | 0 | 0 | 24161 |
12 | 1 | 0 | 0 | 4256 |
13 | 1 | 0 | 0 | 24161 |
而 -i ID 的參數只能同時與一個 -m, -s 或 -q 使用。
最後,ipcs -h 可以得到 ipcs 的基本使用資訊:
[root]# ipcs -h
ipcs provides information on ipc facilities for which you have read access.
Resource Specification:
-m : shared_mem
-q : messages
-s : semaphores
-a : all (default)
Output Format:
-t : time
-p : pid
-c : creator
-l : limits
-u : summary
-i id [-s -q -m] : details on resource identified by id usage : ipcs -asmq -tclup
ipcs [-s -m -q] -i id
ipcs -h for help.而更詳細的資訊可以 man ipcs 得到。
/ 勘誤資訊 /
本文如有謬誤或建議,請來信筆者的電子郵件信箱。
gjchen@csie.nctu.edu.tw 交大資工 陳俊哲