当以普通用户身份运行时,此调用在具有EACCES的Solaris上失败:
sem_open(fileName.c_str(), O_CREAT, S_IRWXU | S_IRWXG | S_IRWXO, 1);
当进程以root身份启动时,它运行正常。这是预期的行为吗?
环境:
$ uname -a
SunOS solaris 5.11 11.0 i86pc i386 i86pc
$ g++ --version
g++ (GCC) 4.5.2
答案 0 :(得分:1)
在命令行中尝试:
prctl $$
这些是您的流程具有的系统强制资源限制。注意有
process.max-sem-ops
process.max-sem-nsems
project.max-sem-ids
这些是带有数字的限制,如果您没有看到它们(或已达到限制),那么您必须使用projadd
或projmod
将它们添加到您帐户的个人资料中以增加它们如果你的项目已经存在。
如果你不能这样做(没有root访问权限),请咨询你的系统管理员,他/她可能有一些不允许semapahore访问的原因。
请注意:
sempahores是内核持久性的。如果你运行你的代码很多次你创建的sempahores可能仍然存在。
要查看现有的信号量,请尝试ipcs -as
要删除代码应删除的延迟的sempahore,请使用ipcrm