当从一个进程向另一个进程发送信号时,我还想发送 long 类型的值。那可能吗?我正在使用SIGUSR1。
答案 0 :(得分:8)
当然可以,但您必须使用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);