Envoi d’informations avec un signal sous Linux

Lors de l’envoi d’un signal d’un processus à un autre, je souhaite également envoyer une valeur de type long . Est-ce possible? J’utilise SIGUSR1.

Bien sûr que vous pouvez, mais vous devrez l’envoyer avec sigqueue(2) au lieu de kill(2) . Et vous pouvez envoyer un int ou un sival_ptr .

 union sigval { int sival_int; void *sival_ptr; }; 

Établir le gestionnaire

 struct sigaction sa; sigemptyset(&sa.sa_mask); sa.sa_sigaction = handler; sa.sa_flags = SA_SIGINFO; /* Important. */ sigaction(SIGUSR1, &sa, NULL); 

Le gestionnaire pour un signal établi avec SA_SIGINFO

 static void handler(int sig, siginfo_t *si, void *ucontext) { si->si_value; /* This is what you're looking for. */ } 

Envoi d’un entier

 union sigval sv; sv.sival_int = 42; sigqueue(pid, SIGUSR1, sv);