在Linux中使用Signal发送信息

时间:2011-09-01 11:35:58

标签: c linux signals

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

1 个答案:

答案 0 :(得分:8)

当然可以,但您必须使用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);