fly231 回复于:2003-06-27 13:25:28 |
我很急,希望高手不吝赐教 |
蓝色键盘 回复于:2003-06-27 17:22:31 |
如何知道和共享内存关联的所有进程号,
具体需要关联到哪些进程,进程之间有没有什么关系 通过shmctl只能知道创建进程号以及最近访问进程号,不知哪位大虾有好办法, 可以永革结果维护pid 另外如何知道进程使用swap的情况,以上不要通过系统命令获得,我需要在程序中获得 /proc |
无双 回复于:2003-06-27 18:06:20 |
fuser命令可以
共享内存应该有文件映射吧 只要有文件映射的就可以通过fuser来查看 |
夜未眠 回复于:2003-06-27 21:43:19 |
On My FreeBSD
$ ipcs -mp Shared Memory: T ID KEY MODE OWNER GROUP CPID LPID m 131072 0 --rwarwarwa root wheel 327 327 m 5767169 0 --rw-r--r-- root wheel 327 537 m 11141122 0 --rwarwarwa lyx wheel 1166 327 m 5701636 0 --rw-r--r-- root wheel 327 1166 $ /usr/src/usr.bin/ipcs have source code. read it by yourself |
夜未眠 回复于:2003-06-27 22:35:57 |
i am sorry that doesn't understand your mean first time.sorry.sorry.
i don't know how to doit.i think list are manage by kernel,couldn't read it by process. |
gadfly 回复于:2003-06-28 13:16:33 |
swap可以通过statfs来查看吧。
至于共享内存的attach个数可以通过,shmctl(segId, IPC_STAT, &ds);取struct shmid_ds ds的成员 unsigned short int shm_nattch; /* number of current attaches */ 来获得。 fuser恐怕只对文件的打开起作用。 |
fly231 回复于:2003-06-28 14:27:14 |
你们的回答都不对啊,shmctl的作用我自己已经写得很清楚了,但是所有关联的进程号无法获得啊,而且我需要在程序中获得,系统命令没有意义,swap我已经有办法了,现在就是共享内存所有关联进程号了,希望大家帮助 |
jobman 回复于:2003-06-28 21:43:19 |
你说的问题我也遇到,共享内存有一个 nattch 字段,表示当前
有几个进程和该共享内存段连接,我想你是需要知道这是哪些进程, 可是看起来不太可能,恐怕得自己解决,因为在核心部分没有留下 相应得信息。至少我没有发现。 |
tinywind 回复于:2003-06-29 01:53:51 |
共享内存好像没办法,linux下看看proc中有没有相关信息。 |
fly231 回复于:2003-06-29 11:03:10 |
谢谢jobman和tinywind |
hilllee 回复于:2003-06-29 12:35:55 |
我在偷偷的跟着学 |
yuxq 回复于:2003-09-26 17:59:18 |
如果非要完成这个功能,那就用mmap来创建共享内存,然后用lsof来判断某个应用是否映射了该共享内存。 |