PHP exec():为啥我可以访问共享内存,但不能访问命名信号量? (错误号 = 13)

Posted

技术标签:

【中文标题】PHP exec():为啥我可以访问共享内存,但不能访问命名信号量? (错误号 = 13)【英文标题】:PHP exec(): Why can I access shared memory, but not named semaphores? (errno = 13)PHP exec():为什么我可以访问共享内存,但不能访问命名信号量? (错误号 = 13) 【发布时间】:2013-04-23 22:13:13 【问题描述】:

我正在使用 php exec() 命令运行 get_value.cget_value.c 附加到共享内存读取一个值并将其返回给我的 PHP 脚本。在我最初测试附加到共享内存时,它工作得很好。

然后当我添加信号量**时,sem_open() 返回 errno = 13。

我在errno 上放置了一个开关块,并列出了sem_open man 页面中的所有错误案例。错误 13 没有被捕获,它只是进入默认情况。

什么是错误 13?

** 我创建了具有权限的信号量 (0666 | O_CREAT | O_EXCL)。

编辑:一切都在命令行中运行。

【问题讨论】:

【参考方案1】:

使用PHPexec("whoami");判断用户,很可能是www-data

这会让您知道 apache 正在尝试访问系统资源的用户。然后您需要允许该用户访问这些资源。

此用户通常位于: /etc/apache2/envvars

【讨论】:

以上是关于PHP exec():为啥我可以访问共享内存,但不能访问命名信号量? (错误号 = 13)的主要内容,如果未能解决你的问题,请参考以下文章

PHP:exec()函数为啥没有反应呢?

PHP调用shell命令,怎么实现,我为啥shell_exec的返回值总是null呢

从 PHP 启动脚本运行 Python 脚本,但不结束它

在 PHP 中使用共享内存

linux vfork的子程序与父进程共享内存,那为啥子进程执行exec就不会覆盖父进程呢?

linux vfork的子程序与父进程共享内存,那为啥子进程执行exec就不会覆盖父进程呢?