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);