【问题标题】:**identifier msqid is removed from the system** meaning**标识符 msqid 已从系统中删除** 含义
【发布时间】:2020-02-18 21:18:15
【问题描述】:

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

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 等。 第一次发送和接收罚款。

【问题讨论】:

  • 错误实际上来自用户进程。它说“从主服务器接收消息时出错(我输入了这部分):标识符已删除”。

标签: c message-queue


【解决方案1】:

Identifier removed 是与错误EIDRM 对应的错误消息。我的系统的msgrcv 手册页说返回此错误的原因如下:

当进程休眠接收消息时,消息队列被移除。

通过将命令IPC_RMID 传递给msgctl 来删除消息队列。

【讨论】:

  • 如何在用户进程休眠时将控制权传递给master?我认为现在发生的事情是,用户被阻止并且主服务器没有运行,最终信号警报(10 秒)导致主服务器进行清理。在清理函数中,消息队列被释放。
  • 我不知道你说的那个问题是什么意思,而且 cmets 不是问新问题的地方(因为它会导致诸如“我如何在用户进程休眠了?”)
猜你喜欢
  • 2015-01-16
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-03-09
  • 1970-01-01
  • 2012-02-19
  • 1970-01-01
  • 2013-01-24
相关资源
最近更新 更多