GNU/Linux >> Tutoriels Linux >  >> Linux

Linux C :à la réception d'un signal, est-il possible de connaître le PID de l'expéditeur ?

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 (comme signal )
  • 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 comme SIGSEGV .)
  • Un ucontext_t * , qui a à voir avec quel thread a reçu le signal. Généralement ignorable.

Linux
  1. 30 choses que vous ne saviez pas sur le noyau Linux

  2. Linux - Trouver le pid du processus à l'aide d'un port spécifique ?

  3. Mise en file d'attente des signaux en C

  4. Est-il possible de démarrer le noyau Linux sans créer d'image initrd ?

  5. Est-il possible d'installer la police Helvetica sur Linux ?

15 choses que vous devez savoir sur la structure de répertoire Linux

Tout ce que vous devez savoir sur le système de fichiers Linux

FreeBSD vs Linux :20 choses à savoir sur le système

Comment connaître les groupes d'un utilisateur Linux

Comment trouver le PID et le PPID d'un processus sous Linux

Toutes les façons possibles de réduire la surchauffe des ordinateurs portables sous Linux