首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >用户可能无法在Linux系统上打开共享内存对象的原因

用户可能无法在Linux系统上打开共享内存对象的原因
EN

Stack Overflow用户
提问于 2015-06-15 16:51:54
回答 1查看 3.7K关注 0票数 0

我支持的应用程序有一些问题,由于各种烦人的原因,我用分叉的工作进程来处理一些任务。这些进程使用共享内存空间来传递状态,有时甚至是结果。我使用boost进程间库来完成这个任务(使用shared_memory_object和mapped_region类型)。

在部署到其中一个系统上,我们的访问权限非常有限,因此很难在该系统上进行调试。有一个完整的过程,只是为了安装一个新版本的软件。但在这个目标上,我们遇到了这样的问题:一个试图启动应用程序的用户能够很好地完成这个任务,而另一个拥有看似相同的凭据、组附属关系等的用户则无法创建共享内存对象。boost错误是“权限拒绝”。如果试图创建共享内存对象,即使名称不存在,也会返回该名称。

我只能以root身份启动应用程序,从而在我的终端上重现这个问题,因此内存空间是以受限的权限创建的,然后以非根用户的身份重新运行,这就产生了相同的权限问题。我能够通过调用权限对象上的set_unrestricted例程来修复这个问题,就像前面提到的here一样。然而,这并不是在这个远程系统上发生的事情,因为用户都不是根用户,而且一个用户不能创建任何命名内存对象,甚至是新的对象。

那么,我的问题是,还有什么其他原因可能会阻止一个用户打开共享内存对象?我只看到提到根/非根限制,但我没有找到任何其他可能的解释。

这是使用boost 1.55进程间库在Linux系统上创建共享内存对象。

EN

回答 1

Stack Overflow用户

发布于 2015-06-15 17:44:28

检查

  • /dev/shm权限(也+x on /dev/ direntry)
  • librt.so的可用性/可访问性
  • 有效上限
  • 主组和次组的id输出
  • SELinux配置(强度,强度0)
  • AppArmor (在这样一个系统上不太可能是罪魁祸首,但仍然如此)

而且,并不是所有内核都编译了SHM支持,但这似乎并不是问题所在。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/30850686

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档