有没有办法通过信号发送值

Posted

技术标签:

【中文标题】有没有办法通过信号发送值【英文标题】:Is there any way to send a value through signal 【发布时间】:2020-12-12 14:12:30 【问题描述】:

我正在编写一个有 2 个进程的程序,父进程分叉以生成一个子进程。我的问题是我想以最简单的方式将值从父母发送给孩子。我可以用信号或任何其他 IPC(最简单)来做到这一点。谢谢大家!!!

【问题讨论】:

【参考方案1】:

可以通过信号发送/接收数据 - 至少在支持sigqueue()sigaction()SA_SIGINFO 的系统上。 接收流程示例:

#include <signal.h>
#include <string.h>

void usr1(int sig, siginfo_t *sip, void *ptr)

    printf("sival_int %d\n", sip->si_value.sival_int);


. . .

    struct sigaction sa;

    memset(&sa, 0, sizeof (sa));
    sa.sa_sigaction = usr1;
    sa.sa_flags = SA_SIGINFO;
    sigaction(SIGUSR1, &sa, NULL);

发送过程示例:

#include <signal.h>

. . .

    union sigval sv;

    sv.sival_int = 43210;
    sigqueue(target_pid, SIGUSR1, sv);

请参阅union sigval 以获取其他选择。 手册页:sigaction、sigqueue

【讨论】:

对我来说非常有用的答案,谢谢!

以上是关于有没有办法通过信号发送值的主要内容,如果未能解决你的问题,请参考以下文章

有没有办法从另一个进程向线程发送信号?

将字符串发送到子进程的信号

信号发送到 PGRP

有没有办法在 Qt 中“吃掉”信号?

如何使用信号/槽机制获取发送者小部件?

DBus Glib 发送信号 - 没有发出信号