How to get a signal sent using sigqueue in a c-program (on linux)?

How do I get a signal sent with a cig in c (linux) program?

If you just use kill to send a signal, I just add a receiver with something like this

signal(SIGUSR1, sigusr1); 

which point to a simple function like this:

 void sigusr1() { signal(SIGUSR1,sigusr1); printf("SIGUSR1 ....\n"); } 

But if I send a signal with sigex, how would I do it?

Thanks Johan


Add sigaction:

 struct sigaction action; action.sa_flags = SA_SIGINFO; action.sa_sigaction = &sigusr2; if (sigaction(SIGUSR2, &action, NULL) == -1) { perror("sigusr: sigaction"); _exit(1); } 

Where sigusr2 will look something like this:

 void sigusr2(int signo, siginfo_t *info, void *extra) { void *ptr_val = info->si_value.sival_ptr; int int_val = info->si_value.sival_int; printf("Signal %d, value %d \n", signo, int_val); } 

And just for reference to the sigest example

 sigval value; for(int i=10;i<20;i++) { value.sival_int = i; sigqueue(pid,SIGUSR2, value); } 
+7
c linux ipc sigqueue
source share
1 answer

Use sigaction .

+1
source share

All Articles