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?
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);
où 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);
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).
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