0

当以普通用户身份运行时,此调用在带有 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
4

1 回答 1

1

在命令行尝试:

prctl $$

这些是您的进程具有的系统强制资源限制。注意有

process.max-sem-ops
process.max-sem-nsems
project.max-sem-ids

这些是有数字的限制,如果您没有看到它们(或已经达到限制),那么您必须将它们添加到您的帐户配置文件中,projadd或者projmod如果您的项目已经存在,则增加它们。

如果您无法执行此操作(无 root 访问权限),请咨询您的系统管理员,他/她可能有某些原因不允许信号量访问。

仔细注意:

信号量是内核持久的。如果您多次运行您的代码,您创建的信号量可能仍然存在。

要查看现有信号量,请尝试ipcs -as

要删除您的代码应该删除的挥之不去的信号量,请使用ipcrm

于 2013-06-17T13:41:16.460 回答