用IPC::Shareable 分配的共享内存,在程序异常退出后,怎么回收这段共享内存

用IPC::Shareable 分配的共享内存,在程序异常退出后,怎么回收这段共享内存

用IPC::Shareable 分配的共享内存,在程序异常退出后,怎么回收这段共享内存 ???


QUOTE:
原帖由 miaho 于 2009-1-12 09:54 发表
用IPC::Shareable 分配的共享内存,在程序异常退出后,怎么回收这段共享内存 ???

有个ipcrm命令
-m shmid
             Mark the shared memory segment associated with id shmid for
             removal.  This marked segment will be destroyed after the last
             detach.


这里的shmid如何获取到呢?
文档下面不是有 SEE ALSO 么?


QUOTE:
原帖由 miaho 于 2009-1-12 11:08 发表
-m shmid
             Mark the shared memory segment associated with id shmid for
             removal.  This marked segment will be destroyed after the last
             detach.


这里的sh ...

模块中不能得到id, 只能知道key吗?没用过关于shm的perl模块。可以先看看能否用perl解决

命令ipcs -m可以查看shm


QUOTE:
原帖由 MMMIX 于 2009-1-12 11:16 发表
文档下面不是有 SEE ALSO 么?

呵呵

QUOTE:
perl(1), perltie(1), Storable(3), shmget(2), ipcs(1), ipcrm(1) and other SysV IPC man pages.

google了一下,看到了。用ipcs就可以。

能不能在perl内实现这个自动回收共享块,当脚本发现有异常中断时,立即调用清楚共享块的语句呢???

是否可以使用这样的方法:

SIG{INT} = sub { IPC::Shareable->clean_up_all};


QUOTE:
原帖由 miaho 于 2009-1-12 11:34 发表
google了一下,看到了。用ipcs就可以。

能不能在perl内实现这个自动回收共享块,当脚本发现有异常中断时,立即调用清楚共享块的语句呢???

是否可以使用这样的方法:

SIG{INT} = sub { IPC::Shareab ...

验证一下吧。

QUOTE:
NOTES
Footnotes from the above sections
...
3 If the process has been smoked by an untrapped signal, the binding will remain in shared memory. If you're cautious, you might try
$SIG{INT} = \&catch_int;
sub catch_int {
     die;
}
...
tie $variable, IPC::Shareable, 'data', { 'destroy' => 'Yes!' };
which will at least clean up after your user hits CTRL-C because IPC::Shareable's END method will be called. Or, maybe you'd like to leave the binding in shared memory, so subsequent process can recover the data...



QUOTE:
原帖由 miaho 于 2009-1-12 11:34 发表
google了一下,看到了。用ipcs就可以。

这个问题该用 man/info,而不是 google.

QUOTE:
能不能在perl内实现这个自动回收共享块,当脚本发现有异常中断时,立即调用清楚共享块的语句呢???

是否可以使用这样的方法:

SIG{INT} = sub { IPC::Shareab ...

这个做不到 100% 有效,有些时候还是需要手工清理。


QUOTE:
原帖由 ynchnluiti 于 2009-1-12 11:19 发表

呵呵

我说的是 ipcrm(8) 的 see also