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.