进程间通信——消息队列msgget 返回失败(项目中遇到的小问题)

进行异常退出,创建了消息队列,再启进进程时,msgget返回失败,perror得出结果为Permision denied。

由于消息队列创建了,若进行异常队列,并未处理,故再启动时失败。

可用ipcs命令查看当前消息队列。

另外,2种方案解决:

1、重启系统(太野蛮了,但开始我就是这么解决的)

2、先删除消息

     1)代码中删除参考代码如下 :msgctl(qid,   IPC_RMID,   0); (未测试)

     2)命令删除:  ipcrm -q msgid

 

还有,创建时,需要指定权限,如 msgget (key, IPC_CREAT | 0666);  注意,是0666,不是0x666,相关资料可以看这个帖子

http://linux.chinaunix.net/bbs/viewthread.php?tid=912698

 

删除消息的脚本,

有如下:ipcs -q | grep '^[0-9]' | awk '{system("ipcrm msg "$2"")}'

来源如下网页

http://bbs.chinaunix.net/viewthread.php?tid=155580

你可能感兴趣的:(脚本,测试,System)