C **标识符msqid已从系统中删除**

C **标识符msqid已从系统中删除**,c,message-queue,C,Message Queue,我的程序给了我一个标识符删除错误。我正在浏览手册页,不明白是什么导致了“标识符已删除”错误。我注意到,每当我第二次尝试向用户进程发送消息时,都会发生这种情况。第一次发送和接收都可以。我尝试了很多复制一个小的例子,但我不能。我想这里没有人想看这么多行代码。但我现在做的基本上是 while(1) { if(messsage recieved from oss) //msg type getpid(), message text stores master pid {

我的程序给了我一个标识符删除错误。我正在浏览手册页,不明白是什么导致了“标识符已删除”错误。我注意到,每当我第二次尝试向用户进程发送消息时,都会发生这种情况。第一次发送和接收都可以。我尝试了很多复制一个小的例子,但我不能。我想这里没有人想看这么多行代码。但我现在做的基本上是

while(1)
{
      if(messsage recieved from oss)  //msg type getpid(), message text stores master pid
       {
          send message to oss  //message type master pid, message text stores getpid()
       }
}
用户进程在随机时间收到一条消息,如:时间1、时间4、时间8等。
它第一次发送和接收罚款。

标识符已删除
是与错误
EIDRM
对应的错误消息。我的系统的
msgrcv
手册页显示返回此错误的原因如下:

当进程正在休眠以接收消息时,消息队列被删除


通过将命令
IPC\u RMID
传递到
msgctl

删除消息队列。错误实际上来自用户进程。上面写着“从master接收消息时出错(我键入了这个部分):标识符被删除”。当用户进程休眠时,如何将控件传递给master?我认为现在发生的是,用户被阻止,主机没有运行,最终信号警报(10秒)导致主机进行清理。在cleanup函数中,消息队列被释放。我不知道你说的这个问题是什么意思,并且注释不是提出新问题的地方(因为它会导致一些糟糕的问题,比如“当用户进程睡眠时,如何将控件传递给master?”)