当从一个进程向另一个进程发送信号时,我还想发送一个long 类型的值。那可能吗?我正在使用 SIGUSR1。
最佳答案
当然可以,但是您必须使用 sigqueue(2)
发送它而不是 kill(2)
。您可以发送 int
或 sival_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/