c - 在 Linux 中使用 Signal 发送信息

标签 c linux signals

当从一个进程向另一个进程发送信号时,我还想发送一个long 类型的值。那可能吗?我正在使用 SIGUSR1。

最佳答案

当然可以,但是您必须使用 sigqueue(2) 发送它而不是 kill(2)。您可以发送 intsival_ptr

union sigval {
    int   sival_int;
    void *sival_ptr;
};

建立处理程序

struct sigaction sa;
sigemptyset(&sa.sa_mask);
sa.sa_sigaction = handler;
sa.sa_flags = SA_SIGINFO; /* Important. */

sigaction(SIGUSR1, &sa, NULL);

使用 SA_SIGINFO 建立的信号处理程序

static void
handler(int sig, siginfo_t *si, void *ucontext)
{
    si->si_value; /* This is what you're looking for. */
}

发送整数

union sigval sv;
sv.sival_int = 42;

sigqueue(pid, SIGUSR1, sv);

关于c - 在 Linux 中使用 Signal 发送信息,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7269709/

相关文章:

c - sizeof(结构)、sizeof(字符串)、sizeof(数组)

c - Delphi 中通过引用传递的指针(从 DLL 导入函数)

python - 如何使用 python 从 Linux/Windows 机器在远程 Linux/Windows 机器上执行命令?

c - 在 Linux 中重新传播捕获的信号

c++ - 潜在 throw 函数是否信号安全?

Python C API 性能提升?

c++ - 将范围有限的 float 转换为保持排序顺序和精度的无符号整数?

linux - 当 MP4Box 合并视频时,无法播放 part2 子视频

linux - 什么是适用于 Linux 的好的 Prolog IDE?

initialization - VHDL/如何初始化我的信号?