当从一个进程发送信号到另一个进程时,我也想发送一个longtypes的值。 那可能吗? 我正在使用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);