61 votes

Comment déclencher SIGUSR1 et SIGUSR2 ?

Je fais connaissance avec les signaux en C. Je n'arrive pas à comprendre de quel type de signaux sont SIGUSR1 et SIGUSR2 et comment je peux les déclencher. Est-ce que quelqu'un peut me l'expliquer, s'il vous plaît ?

84voto

Oli Charlesworth Points 148744

Ils sont des signaux définis par l'utilisateur, donc ils ne sont déclenchés par aucune action particulière. Vous pouvez les envoyer explicitement par programmation :

#include 

kill(pid, SIGUSR1);

pid est l'identifiant du processus destinataire. À l'extrémité réceptrice, vous pouvez enregistrer un gestionnaire de signaux pour eux :

#include 

void my_handler(int signum)
{
    if (signum == SIGUSR1)
    {
        printf("Reçu SIGUSR1!\n");
    }
}

signal(SIGUSR1, my_handler);

6voto

cnicutar Points 98451

Ils sont des signaux que les développeurs d'applications utilisent. Le noyau ne devrait jamais les envoyer à un processus. Vous pouvez les envoyer en utilisant kill(2) ou en utilisant l'utilitaire kill(1).

Si vous avez l'intention d'utiliser des signaux pour la synchronisation, vous voudrez peut-être vérifier les signaux en temps réel (il y en a plus, ils sont mis en file d'attente, leur ordre de livraison est garanti, etc).

6voto

Terminal 1

dd if=/dev/sda of=debian.img

terminal 2

killall -SIGUSR1 dd

retournez au terminal 1

34292201+0 enregistrements lus
34292200+0 enregistrements écrits
17557606400 bytes (18 Go) copiés, 1034.7 s, 17.0 Mo/s

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X