微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

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

如何解决C 接收来自特定进程的信号

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

解决方法

是的,这可以通过标准 UNIX 信号实现,这些信号具有发送者的概念,因此您的应用程序可以检查谁生成了信号。

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

类似于:

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?
    ...
    }
}
,

不,这对信号是不可能的。信号必须具有“发送者”的概念,因此应用程序无法检查是谁生成的信号。

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

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。