OxFFFFFFFF是DWORD类型的最大值,同时也代表int类型的-1
一般情况下,是用该值来表示一个异常值,比如函数返回该值时,一般表示函数处理有异常,
接着要用GetLastError来判断错误原因。当然,具体情况具体对待。
shmat
shmat(把共享内存区对象映射到调用进程的地址空间)
shmdt(断开共享内存连接)
shmctl(共享内存管理)
我知道 如何使用一个共享内存段在代码里, 我想要的是一个命令 告诉我所有的processes PIDs
已经调用shmat,没有随后调用shmdt。kernel 知道这个,因为它持有内存映射对于所有的进程
更多的细节, 我是经历的例子,一些进程已经调用了共享内存请求被删除(第2个参数传递为一个IPC_RMID)
直到所有的进程已经调用共享内存必须持有segment.
更多的细节, 我经历的例子, 一些process 已经调用共享内存管理
告诉它被删除(第2个蚕食传递一个IPC_RMID) 直到所有的进程调用shmdt(断开共享内存连接)
必须持有segment.
它的flags 这个(通过ipcs)两种方式:
1) 它改变key 到0xFFFFFFFF (在Linux 它是0X00000000),
2) 它显示一个D 在MODE 列的第一个字符(不会看到在linux)
第一个不足以说他是准备被删除的 因为进程私有keys 也会显示为 0xFFFFFFFF (0x00000000 in Linux).
因此, 在Linux 它看起来没有好的方式知道(通过ipcs) segment 是待删除的
无论哪种方式,共享内存segment 会逗留知道每个进程已经调用
shmdt(断开共享内存连接)
oracle@lspj1:/home/oracle/$ipcs -m
IPC status from /dev/mem as of Mon Feb 27 10:51:03 BEIST 2017
T ID KEY MODE OWNER GROUP
Shared Memory:
m 1048576 0x780000e8 --rw-rw-rw- root system
m 1048577 0x780000e6 --rw-rw-rw- root system
m 11534338 00000000 --rw-r----- grid oinstall
m 386924547 0xffffffff D-rw------- oracle oinstall
m 4 0x21000052 --rw------- pconsole system
m 2097157 00000000 --rw-r----- grid oinstall
m 6291462 0x10a4d874 --rw-r----- grid oinstall
m 7 0x210000fa --rw-rw---- root system
m 572522504 0x0d011992 --rw-rw---- root system
m 222298121 0x6c00807c --rw------- zabbix staff
m 13631498 0x210000f2 --rw-rw---- oracle oinstall
m 271581195 0xffffffff D-rw------- oracle oinstall
m 962593516 0xd0307dbc --rw-r----- oracle oinstall
m 22020845 0xffffffff D-rw------- oracle oinstall
m 15729390 0xffffffff D-rw------- oracle oinstall
m 955253487 0xffffffff D-rw------- oracle oinstall
m 682623728 0xffffffff D-rw------- oracle oinstall
oracle@lspj1:/home/oracle/$