问题标签 [ipcs]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
linux - 未找到与信号量相关的进程
最近我们面临一些问题,我们时不时地用完信号量,所以为了调试,我使用以下命令来识别获取的信号量与哪个进程有关
上面的命令会给我与我的 unix id 相关的信号量。之后我执行以下命令以获取与信号量相关的进程:
这将给出输出:
但它返回的 pid(28438) 与任何正在运行的进程无关。所以我的问题是,即使进程现在没有运行,是否有任何方法可以识别信号量与哪个进程(实际可执行名称)相关?
php - sem_release(): 未能释放密钥 0xc: 无效参数
我正在使用信号量来同步我的应用程序中的某些部分。
在释放信号量(sem_release)时,我收到以下警告:
sem_release(): 未能释放密钥 0xc: 无效参数
首先我不知道信号量是否释放,但由于我没有得到“真实”的结果,我猜它没有释放。
PHP版本:5.6.30
ipcs -V => 来自 util-linux 2.25.2 的 ipcs
这是信号量:
这是代码的一部分(同步类):
PS我只在我的生产环境中遇到这个错误,我无法在我的测试环境中重现/调试。
我在 Internet 上搜索此错误消息,但一无所获。
有谁知道这个消息是什么意思?
编辑:
- 每次脚本运行时都不会出现错误消息。
- 我确实有时会收到错误“获取信号量时出错”,类似警告“sem_acquire():未能获取密钥 0xc:标识符已删除”,但不是同时(一天)我得到“释放信号量时出错”
- 上面的类在各处使用不同的键来同步部分应用程序代码。我对其他键没有任何问题。是的,这个键“12”/“0xc”只在一个地方使用并且来自同一个用户。
- 不应出现权限问题,因为如果您检查信号量“0xc”的权限为“666”
c - 访问共享内存段的进程返回不同的值
我是 IPCS 概念的新手,我想实现一个进程创建并初始化共享内存,然后调用另一个进程,该进程附加到同一共享内存段并打印共享内存中的数据。但是我无法实现它:
AlgoCommon.h
算法油门.c
算法阅读.c
这是我的输出:
此外,系统调用的输出首先显示,然后是 printf 语句,即使在我在调用 system() 之前使用了 sleep(1) 之后
linux - shm_open() 不创建共享内存段 ipcs
我得到了以下成功执行的 C 代码:
使用ls -l /dev/shm
我看到name memory_package_name
正确创建的文件,但是当我使用ipcs
它时不显示任何共享内存段:
为什么?
c - 为什么 msgrcv 返回标识符已删除?
我正在学习 IPCS,我尝试将消息从客户端发送到服务器,服务器将其乘以 2,然后使用 、 、 和 将其发送ftok
回msgget
客户端。这是我的代码:msgrcv
msgsnd
msgctl
ex1.h
服务器.c
客户端.c
由于第 23/24 行,我得到Invalid argument
或Identifier removed
错误,但我不明白这里有什么问题。
linux - 向 msgbuf 添加字段
我得到了在 Linux 中创建消息队列的任务。我需要使用msgnd()
和msgrcv()
功能。mtype
如果我的消息结构有两个字段,那么一切正常,mtext[]
但我需要再添加一个字段int mpid
。但是当我从 mpid 读取值时,它只是内存中的垃圾。我搜索了答案或示例,但只找到了具有两个字段的结构。我还能添加更多吗?
发件人代码
接收器代码
c - 在什么情况下,ipcs -qa 的输出中消息队列的 lrpid 会保持为 0?
所以,我得到了 ipcs -qa 的输出,我得到的输出是这样的:
数据仅供参考,但观察到队列中有1条消息,可能是由LSPID下的进程ID创建的,但LRPID下的进程ID为0。由于没有进程ID从队列中收到消息所以 RTIME 值是禁止进入的。
我想了解在什么条件下创建队列但没有进程接收消息。
另外在命令的第二个输出下,QNUM的个数也是0,表示队列中没有消息,但是创建了一个队列。在什么情况下会创建队列但没有进程能够在队列中发送消息。队列创建和访问都发生在作为队列所有者的同一用户身上,因此可能不存在权限问题。
我了解此输出特定于我的应用程序本身,但我希望了解是否存在任何通用标准,例如超时或其他可能导致这种情况的情况。
我正在使用 C 语言 ipc 库。
谢谢你的帮助。
linux - 如何从 linux 命令提示符删除/释放命名信号量?
我有一个代码如下。它在访问信号量时崩溃,并且我创建了“命名信号量”,崩溃后我无法从命令提示符删除。如何使用命令提示实用程序删除它们?该代码试图创建可以从 2 个生产者(玩家)命令提示符和一个消费者(结果)命令提示符运行的 Rock,Paper,Scissors 游戏。我也很感激有关修复/更正/改进代码的建议。