2
发送信息,当从一个进程发送一个信号到另一个,我也想送型长的值。那可能吗?我正在使用SIGUSR1。与信号在Linux中
发送信息,当从一个进程发送一个信号到另一个,我也想送型长的值。那可能吗?我正在使用SIGUSR1。与信号在Linux中
当然你可以,但你必须发送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);
感谢这样一个伟大的解决方案:)! – MetallicPriest
这是可能的,cnicutar说,但你可能会发现用于通信的更好的渠道。从设计角度来看,当你不必绝对必须使用信号通常是一个非常糟糕的想法。 –