问题标签 [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.

0 投票
0 回答
251 浏览

linux - 未找到与信号量相关的进程

最近我们面临一些问题,我们时不时地用完信号量,所以为了调试,我使用以下命令来识别获取的信号量与哪个进程有关

上面的命令会给我与我的 unix id 相关的信号量。之后我执行以下命令以获取与信号量相关的进程:

这将给出输出:

但它返回的 pid(28438) 与任何正在运行的进程无关。所以我的问题是,即使进程现在没有运行,是否有任何方法可以识别信号量与哪个进程(实际可执行名称)相关?

0 投票
1 回答
561 浏览

php - sem_release(): 未能释放密钥 0xc: 无效参数

我正在使用信号量来同步我的应用程序中的某些部分。

在释放信号量(sem_release)时,我收到以下警告:

sem_release(): 未能释放密钥 0xc: 无效参数

首先我不知道信号量是否释放,但由于我没有得到“真实”的结果,我猜它没有释放。

PHP版本:5.6.30

ipcs -V => 来自 util-linux 2.25.2 的 ipcs

这是信号量:

这是代码的一部分(同步类):

PS我只在我的生产环境中遇到这个错误,我无法在我的测试环境中重现/调试。

我在 Internet 上搜索此错误消息,但一无所获。

有谁知道这个消息是什么意思?

编辑:

  1. 每次脚本运行时都不会出现错误消息。
  2. 我确实有时会收到错误“获取信号量时出错”,类似警告“sem_acquire():未能获取密钥 0xc:标识符已删除”,但不是同时(一天)我得到“释放信号量时出错”
  3. 上面的类在各处使用不同的键来同步部分应用程序代码。我对其他键没有任何问题。是的,这个键“12”/“0xc”只在一个地方使用并且来自同一个用户。
  4. 不应出现权限问题,因为如果您检查信号量“0xc”的权限为“666”
0 投票
2 回答
1532 浏览

c - 访问共享内存段的进程返回不同的值

我是 IPCS 概念的新手,我想实现一个进程创建并初始化共享内存,然后调用另一个进程,该进程附加到同一共享内存段并打印共享内存中的数据。但是我无法实现它:

AlgoCommon.h

算法油门.c

算法阅读.c

这是我的输出:

此外,系统调用的输出首先显示,然后是 printf 语句,即使在我在调用 system() 之前使用了 sleep(1) 之后

0 投票
1 回答
609 浏览

linux - shm_open() 不创建共享内存段 ipcs

我得到了以下成功执行的 C 代码:

使用ls -l /dev/shm我看到name memory_package_name正确创建的文件,但是当我使用ipcs它时不显示任何共享内存段:

为什么?

0 投票
1 回答
91 浏览

c - 为什么 msgrcv 返回标识符已删除?

我正在学习 IPCS,我尝试将消息从客户端发送到服务器,服务器将其乘以 2,然后使用 、 、 和 将其发送ftokmsgget客户端。这是我的代码:msgrcvmsgsndmsgctl

ex1.h

服务器.c

客户端.c

由于第 23/24 行,我得到Invalid argumentIdentifier removed错误,但我不明白这里有什么问题。

0 投票
0 回答
71 浏览

linux - 向 msgbuf 添加字段

我得到了在 Linux 中创建消息队列的任务。我需要使用msgnd()msgrcv()功能。mtype如果我的消息结构有两个字段,那么一切正常,mtext[]但我需要再添加一个字段int mpid。但是当我从 mpid 读取值时,它只是内存中的垃圾。我搜索了答案或示例,但只找到了具有两个字段的结构。我还能添加更多吗?

发件人代码

接收器代码

0 投票
1 回答
21 浏览

c - 在什么情况下,ipcs -qa 的输出中消息队列的 lrpid 会保持为 0?

所以,我得到了 ipcs -qa 的输出,我得到的输出是这样的:

数据仅供参考,但观察到队列中有1条消息,可能是由LSPID下的进程ID创建的,但LRPID下的进程ID为0。由于没有进程ID从队列中收到消息所以 RTIME 值是禁止进入的。

我想了解在什么条件下创建队列但没有进程接收消息。

另外在命令的第二个输出下,QNUM的个数也是0,表示队列中没有消息,但是创建了一个队列。在什么情况下会创建队列但没有进程能够在队列中发送消息。队列创建和访问都发生在作为队列所有者的同一用户身上,因此可能不存在权限问题。

我了解此输出特定于我的应用程序本身,但我希望了解是否存在任何通用标准,例如超时或其他可能导致这种情况的情况。

我正在使用 C 语言 ipc 库。

谢谢你的帮助。

0 投票
1 回答
17 浏览

linux - 如何从 linux 命令提示符删除/释放命名信号量?

我有一个代码如下。它在访问信号量时崩溃,并且我创建了“命名信号量”,崩溃后我无法从命令提示符删除。如何使用命令提示实用程序删除它们?该代码试图创建可以从 2 个生产者(玩家)命令提示符和一个消费者(结果)命令提示符运行的 Rock,Paper,Scissors 游戏。我也很感激有关修复/更正/改进代码的建议。