Je commence à me familiariser avec les signaux en C. Je ne sais pas quel type de signaux SIGUSR1
et SIGUSR2
sont et comment puis-je les déclencher. Quelqu'un peut-il m'expliquer s'il vous plaît?
Ce sont des signaux définis par l'utilisateur, ils ne sont donc déclenchés par aucune action particulière. Vous pouvez les envoyer explicitement par programme:
#include <signal.h>
kill(pid, SIGUSR1);
où pid
est l'ID de processus du processus de réception. A la réception, vous pouvez enregistrer un gestionnaire de signaux 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 en utilisant kill(2)
ou en utilisant l'utilitaire kill(1)
.
Si vous souhaitez utiliser des signaux pour la synchronisation, vous pouvez vérifier les signaux en temps réel (ils sont plus nombreux, 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
retourner au terminal 1
34292201+0 records in
34292200+0 records out
17557606400 bytes (18 GB) copied, 1034.7 s, 17.0 MB/s