问题标签 [sigqueue]

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 投票
2 回答
1274 浏览

python - 如何在 Python 中发送和接收实时信号`sigqueue()`?

Python 提供了一个signals模块和os.kill; 它是否具有sigqueue()(带有附加数据的实时信号)的功能?有哪些替代方案?

0 投票
1 回答
7274 浏览

c - 如何在 ac 程序(在 linux 上)中接收使用 sigqueue 发送的信号?

如何在 ac 程序(在 linux 上)中接收使用 sigqueue 发送的信号?

如果只是使用 kill 发送信号,我只需添加一个类似这样的接收器

那指向一个像这样的简单函数:

但是如果我用 sigqueue 发送一个信号,那我该怎么办呢?

谢谢约翰


添加签名:

sigusr2 看起来像这样:

仅用于参考 sigqueue 示例

0 投票
2 回答
1434 浏览

c++ - 无法使用 gcc 构建 sigqueue 示例,但 g++ 可以吗?

我有一个奇怪的构建问题。

我有一个简单的测试程序,可以将 sigqueue 发送到另一个进程。

这个小代码示例在我将它构建为 c++ 程序(使用 g++ 编译)时构建并运行,但是当我将它编译为 ac 程序(使用 gcc)时,我收到一个错误,他找不到 sigval 结构。

简短的例子:

请注意,我将 pid 替换为 0 以简化此问题。

如果我用 gcc 编译,我会得到:

我在这里缺少什么,为什么他找不到 sigval 结构?为什么g++能找到呢?

谢谢约翰

0 投票
2 回答
3026 浏览

c - siginfo中的数据可信吗?

我发现在 Linux 上,通过自己调用rt_sigqueue系统调用,我可以将我喜欢的任何内容放在si_uidandsi_pid字段中,并且调用成功并愉快地传递了不正确的值。自然地,发送信号的 uid 限制为这种欺骗提供了一些保护,但我担心依赖这些信息可能会很危险。有没有关于我可以阅读的主题的好文档?为什么 Linux 允许让调用者指定siginfo参数而不是在内核空间中生成参数的明显不正确的行为?这似乎很荒谬,特别是因为可能需要额外的系统调用(以及因此的性能成本)才能在用户空间中获取 uid/gid。

编辑:基于我对POSIX的阅读(重点由我添加):

如果 si_code 为 SI_USER 或 SI_QUEUE、[XSI] 或任何小于或等于 0 的值,则信号由进程生成,si_pid 和 si_uid应分别设置为进程 ID 和发送者的真实用户 ID。

我相信 Linux 的这种行为是不符合标准的并且是一个严重的错误。

0 投票
1 回答
897 浏览

c - 我可以将带有 sigqueue 的 char* 发送到另一个进程吗

这是我在客户端程序中的一部分代码

这是我在服务器程序中的处理程序

没有错误,但我无法收到我发送的内容。它打印出一些奇怪的东西。

0 投票
1 回答
7534 浏览

c - 如何接收 sigqueue() 系统调用发送的数据

我有 2 个进程 sigserver 和 sigclient。sigserver 等待信号到来,sigclient 将数据 (int+char) 发送到 sigserver。

sigserver.c

sigclient.c

现在,当我使用以下命令运行客户端时 ./client server_pid 15 teststring

服务器生成核心转储。

我的问题是,一个进程如何读取另一个进程(不是子进程)发送的字符串。

0 投票
1 回答
1339 浏览

c - Send child pid using sigqueue and SIGUSR1 to father

I am trying to send a child's pid to his father using SIGUSR1 and sigqueue. But the signal is never sent, or it appears not to be sent.

Running the code above I get the following output:

And that's not all. If I run it again, all my apps close(editor,terminal,etc.) and I need to sign in again. (kind of a switch user operation) What's wrong with the code? Thanks.

0 投票
1 回答
1365 浏览

c - sigqueue() 向进程组发送信号

我用 fork() 创建进程树(大约 3 个孩子)。我可以通过 kill(-getpgrp(), signal_number) 轻松地向它们所有人发送信号,但是如何对 sigqueue 做同样的事情呢?

他们说,sigqueue() 函数向一个进程或一组进程发送信号,但与 kill() 不同,我不能通过在 pid 中指定负值来使用 sigqueue() 向整个进程组发送信号.

那么该怎么做呢?

编辑:

代码:

s1.c 是一个程序,我在其中“捕捉”信号以控制它们。所以这对 s1(具有相同的组 id)等待来自 sigqueue() 的信号。

0 投票
0 回答
467 浏览

linux - 有没有办法在 OS X 上使用 sigqueue?

我最近注意到 sigqueue 在 OS X (mac OS Sierra) 上不起作用,我想知道是否有不使用虚拟机 (linux) 的方法

0 投票
1 回答
59 浏览

linux - 可以将信号从自处理推送到自处理,然后作为 EPOLL 上的事件处理吗?

我必须设计一个实时系统来处理从 posix mqueue(专有实现)上的多个进程接收到的数据。主要要求是不改变整个系统的主循环延迟,而是处理事件。我不想从接收数据的源进程创建事件,而是从自进程创建信号到自进程触发数据被接收,数据将在 EPOLL 处处理。

  • 那么,做这样的事情安全吗?
  • 我尝试了一个伪代码并得到了这个结果:“ sigqueue:(errno:11)资源暂时不可用”这可能是什么问题?

提前致谢。

问候, Tanuj Sinha