【问题标题】:semaphore keys lost after some time信号量键在一段时间后丢失
【发布时间】:2018-08-04 06:27:19
【问题描述】:

我有一个使用共享内存的父子进程。 孩子每秒将数据放入共享内存大约 10 次。 父母和孩子在写/读时使用信号量来锁定资源。 这个解决方案工作了几个小时,然后我开始收到警告:

PHP 警告:sem_acquire():未能获取密钥 0x4101f1fb:第 350 行 script.php 中的参数无效
PHP 警告:sem_release(): SysV 信号量 140105644163240(键 0x4101f1fb)当前未在 script.php 的第 354 行获取

看起来脚本超出了某些限制并且信号量被破坏,但我在 ipcs 中找不到任何与当前限制/使用有关的内容。

我也尝试 sem_get 以获取新的信号量 ID,但我无法通过共享内存将其传递给子进程 shm_put_var 无法使用资源。 p>

在长期运行的进程中处理信号量的最佳方法是什么?

【问题讨论】:

标签: php semaphore shared-memory


【解决方案1】:

可能是 PHP 中一直存在的错误:

https://bugs.php.net/bug.php?id=44109

第一个(也是唯一一个)评论提到了大约 32000 个信号量标识符,并且这个数字是不可调整的......

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-01-07
    • 2023-03-11
    • 2015-11-25
    相关资源
    最近更新 更多