Oui. Enregistrez votre gestionnaire de signal en utilisant sigaction
avec le SA_SIGINFO
drapeau, en remplissant le sa_sigaction
champ. Maintenant, votre fonction de gestionnaire prend un siginfo_t*
paramètre, qui comprend un champ si_pid
.
Notez que si_pid
n'est défini que dans certaines circonstances. Dans votre cas, vous voudrez vérifier que vérifier que si_code
est défini sur SI_USER
ou SI_QUEUE
. Lire man 2 sigaction
pour en savoir plus.
Oui, si vous utilisez le sigaction()
appelez pour configurer votre gestionnaire de signal au lieu de signal
. Cela vous permettra de configurer un gestionnaire de signal qui prend trois paramètres :
- Un
int
, pour le numéro de signal (commesignal
) - Un
siginfo_t *
, qui est une structure contenant toutes sortes d'informations sur la source du signal, y compris le pid de l'expéditeur le cas échéant. (Il comprend également des informations sur la cause du signal pour les signaux automatiques commeSIGSEGV
.) - Un
ucontext_t *
, qui a à voir avec quel thread a reçu le signal. Généralement ignorable.