semget失败并显示“权限被拒绝”

时间:2009-07-07 15:34:12

标签: unix ipc semaphore

我有2个进程P1和P2。 P1以root身份运行,并通过以下调用创建信号量:

semget(key,1,S_IRUSR | S_IWUSR | S_IRGRP | S_IWGRP | S_IROTH | S_IWOTH | IPC_CREAT);

我正试图在另一个进程P2中获取相同信号量的句柄,该进程在普通用户的上下文中运行。在此过程中,semget调用成功,但semop调用失败并显示“Permission Denied”(Errno = 13)。

任何指针都会有很大的帮助。

〜PS7

4 个答案:

答案 0 :(得分:1)

此条目有很长时间,但我遇到了与

相同的问题
  

0600 | IPC_CREAT

但我已修复使用 sudo

运行我的应用程序

答案 1 :(得分:0)

我们谈论的语言是什么?

我认为导入S_常量时会出现一些错误,因此它们为空并且不起作用。

使用位掩码进行粗暴测试怎么样? 请直接尝试使用IPC_CREAT | 0666

我的2美分:)

答案 2 :(得分:0)

“权限被拒绝”/ EACCES当然与非特权进程P2一致,试图semget现有的信号量无法访问。所以,也许在 key 下已经有一个现存的信号量,它缺少所需的S_IWOTH|S_IROTH权限。 (也许是P1早期版本的残余?)

ipcs -s说信号量的权限是什么?如果您在IPC_EXCL的{​​{1}}来电中添加semget会怎样?它会失败吗?

答案 3 :(得分:0)

使用S_IRUSR和S_IWUSR为所有者指定读写权限 共享内存段,S_IROTH和S_IWOTH指定读写权限 其他标志作为shmget()中的第三个争论。

IPC_CREATE仅保证应创建与密钥值对应的新共享内存段。如果使用键值指定的段存在,则shmget()通常会失败。