Comment déclencher SIGUSR1 et SIGUSR2?

je fais connaissance avec les signaux en C. Je n'arrive pas à comprendre quel genre de signaux SIGUSR1 et SIGUSR2 et comment puis-je déclencher. Quelqu'un peut-il expliquer à moi?

42
demandé sur lmichelbacher 2011-05-29 19:40:18

3 réponses

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

#include <signal.h>

kill(pid, SIGUSR1);

pid est l'identifiant du processus de réception. A la réception, vous pouvez enregistrer un signal handler pour eux:

#include <signal.h>

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

signal(SIGUSR1, my_handler);
54
répondu Oliver Charlesworth 2011-05-29 15:47:46

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

si vous avez l'intention d'utiliser des signaux pour la synchronisation, vous pourriez vouloir 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).

5
répondu cnicutar 2011-05-29 15:42:51

terminal 1

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

terminal 2

killall -SIGUSR1 dd

revenir à la borne 1

34292201+0 records in
34292200+0 records out
17557606400 bytes (18 GB) copied, 1034.7 s, 17.0 MB/s
2
répondu Евгений Кашинский 2017-01-27 06:35:59