技术头条 - 一个快速在微博传播文章的方式     搜索本站
您现在的位置首页 --> 其他 --> Perl 中信号量不能创建的问题解决方法

Perl 中信号量不能创建的问题解决方法

浏览:699次  出处信息

为了多进程的程序能生成 UUID 在程序中使用共享内存来存放信号量, 以  P V 操作来控制不让生成 UUID 的程序会生成重复的 ID . 自己测试着后来发现出了一个奇怪的错误, 刚开始很正常,后来信号量的对象怎么样也 new 不起来.一直是没有定义.

#!/usr/bin/perl
usestrict;
useIPC::Semaphore;
useSmart::Comments;
useIPC::SysV qw(S_IRWXU S_IRUSR S_IWUSR IPC_CREAT IPC_NOWAIT SEM_UNDO);
my$mutex  = IPC::Semaphore->new( 123, 1, S_IRUSR | S_IWUSR | IPC_CREAT );
$mutex->setall(1);
### $mutex 

使用的时候, 每次 setall 都提示 Can't call method "setall" on an undefined value . 很是奇怪.上面这个程序实在简单.后来使用 strace 跟了一下程序. 发现最后报的错是
No space left on device. 也就是讲,其实有些东西达到了操作系统的限制.
所以查了查相关的东西.使用 ipcs -s 的命令,可以查看到操作当前所有的信号量.

# ipcs -s
 
------ Semaphore Arrays --------
key        semid      owner      perms      nsems     
0x0000007b 100925440  root       600        1 

这样就好办了,给自己创建的信号量,但又没有删除的,直接通过相关的命令执行掉就好了.

ipcs -s|perl -nale 'print "ipcrm -s $F[1]" if $F[1] =~ /\d+/'|sh

问题解决.

建议继续学习:

  1. perl更新/修改/删除文本文件内容    (阅读:9483)
  2. perl大牛flw传说    (阅读:6525)
  3. 两个精彩的比喻:吞吐量和延迟、信号量和互斥锁    (阅读:6083)
  4. perl模块Getopt::Std用法及实例-从命令行读取参数模块    (阅读:5941)
  5. [Perl] Template::Toolkit 模板技术.    (阅读:5385)
  6. 在perl中连接和使用sqlite做数据存储    (阅读:5111)
  7. Perl命令行常见用法及技巧    (阅读:4869)
  8. perl模块之MIME::Lite发送有附件的邮件    (阅读:4460)
  9. perl的expect使用方法,实现非交互式登录。    (阅读:4547)
  10. Perl 倒行分析文件方法。perl读文本文件,从末尾往前读.    (阅读:4497)
QQ技术交流群:445447336,欢迎加入!
扫一扫订阅我的微信号:IT技术博客大学习
© 2009 - 2024 by blogread.cn 微博:@IT技术博客大学习

京ICP备15002552号-1