首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >C接收来自特定进程的信号

C接收来自特定进程的信号
EN

Stack Overflow用户
提问于 2021-01-10 22:43:56
回答 2查看 70关注 0票数 0

我正在尝试解决我在C项目中遇到的一个问题,在这个项目中,两个进程A和B通信。进程B使用bash接收来自用户的信号,并将该信号发送到进程A。进程A必须忽略来自用户的任何信号,但必须仅从进程B接收信号。问题是:是否可以仅使用信号来编写这种通信,或者我是否必须使用其他数据结构(如套接字)才能实现通信?

EN

回答 2

Stack Overflow用户

发布于 2021-01-10 23:28:17

是的,对于标准的UNIX信号,这是可能的,它具有发送者的概念,因此您的应用程序可以检查是谁生成了信号。

如果进程A知道进程B的PID,它就可以向sigaction() and SA_SIGINFO注册它的信号处理程序。然后,在传递或接受信号时,进程A可以检查传递给处理程序的the siginfo_t structuresi_codesi_pid成员。如果不是来自B,则简单地不采取任何行动。

类似于:

代码语言:javascript
运行
复制
static pid_t pid_of_B;

....

static void
my_handler(int sig_num, siginfo_t *si, void *ignored) {
    switch (si->si_code) {
    case SI_USER:   // sent via kill
    case SI_QUEUE:  // sent via sigqueue
        if (si->si_pid == pid_of_B) ...   // sent from B?
    ...
    }
}
票数 1
EN

Stack Overflow用户

发布于 2021-01-10 23:16:39

不,这对于信号来说是不可能的。信号必须是“发送者”的概念,所以应用程序不能检查是谁生成了信号。

但是您可以使用管道在两个进程之间传递数据。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/65654493

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档