在Linux中使用Signal发送信息

当从一个进程发送信号到另一个进程时,我也想发送一个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);