2011-09-01 39 views
2

发送信息,当从一个进程发送一个信号到另一个,我也想送型长的值。那可能吗?我正在使用SIGUSR1。与信号在Linux中

+1

这是可能的,cnicutar说,但你可能会发现用于通信的更好的渠道。从设计角度来看,当你不必绝对必须使用信号通常是一个非常糟糕的想法。 –

回答

5

当然你可以,但你必须发送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); 
+0

感谢这样一个伟大的解决方案:)! – MetallicPriest