Question :Comment puis-je envoyer un signal à un autre processus ? Pouvez-vous m'expliquer toutes les options disponibles pour envoyer des signaux à un processus dans un environnement UNIX/Linux ?
Répondre :Vous pouvez envoyer divers signaux aux processus en utilisant l'une des méthodes expliquées dans cet article.
1. Envoyer un signal à un processus à l'aide de Kill
Utilisez la commande kill pour envoyer un signal à un processus. Par exemple, si vous souhaitez envoyer le signal USR1 au processus "a.out", procédez comme suit.
$ ps -C a.out PID TTY TIME CMD 3699 pts/1 00:00:00 a.out $ kill -s USR1 3699
Remarque :Reportez-vous à 4 façons de tuer un processus - kill, killall, pkill, xkill.
2. Envoyer un signal à un processus à partir d'un autre processus
Vous pouvez utiliser l'appel système UNIX kill (à partir d'un programme C) pour envoyer un signal d'un processus à un autre. L'extrait de code C suivant montre comment utiliser la commande kill.
L'appel système Kill prend deux arguments :1) le PID (ID de processus) du processus qui doit être signalé 2) le signal qui doit être envoyé au processus. La commande Kill renvoie 0 lorsqu'elle réussit.
int send_signal (int pid) { int ret; ret = kill(pid,SIGHUP); printf("ret : %d",ret); }
3. Envoyer un signal à un processus à partir du clavier
Lorsqu'un processus est en cours d'exécution sur le terminal, vous pouvez envoyer un signal à ce processus à partir du clavier en utilisant une combinaison spécifique de touches. Voici quelques exemples.
- SIGINT (Ctrl + C) – Vous le savez déjà. Appuyer sur Ctrl + C tue le processus de premier plan en cours d'exécution. Cela envoie le SIGINT au processus pour le tuer.
- Vous pouvez envoyer le signal SIGQUIT à un processus en appuyant sur Ctrl + \ ou Ctrl + Y
Vous pouvez afficher les mappages de touches qui envoient un signal spécifique à un processus à l'aide de la commande "stty -a" comme indiqué ci-dessous.
$ stty -a | grep intr intr = ^C; quit = ^\; erase = ^?; kill = ^U; eof = ^D; eol = M-^?; eol2 = M-^?;