man kill (Appels systèmes) - Envoyer un signal à un processus.
NOM
kill - Envoyer un signal à un processus.
SYNOPSIS
#include <sys/types.h>
#include <signal.h> int kill(pid_t pid, int sig);
DESCRIPTION
L'appel-système kill peut être utilisé pour envoyer n'importe quel signal à n'importe quel processus ou groupe de processus.
Si pid est positif, le signal sig est envoyé au processus pid.
Si pid vaut zéro, alors le signal sig est envoyé à tous les processus appartenant au même groupe que le processus appelant.
Si pid vaut -1, alors le signal sig est envoyé à tous les processus sauf celui de PID 1 (init), mais voir plus bas.
Si pid est inférieur à -1, alors le signal sig est envoyé à tous les processus du groupe -pid.
Si sig vaut 0, aucun signal n'est envoyé mais les conditions d'erreur sont vérifiées.
VALEUR RENVOYÉE
En cas de réussite 0 est renvoyé, en cas d'échec -1 est renvoyé et errno contient le code d'erreur.
ERREURS
- EINVAL
- Numéro de signal invalide.
- ESRCH
- Le processus ou le groupe de processus n'existe pas. Remarquez qu'un processus existant peut être un zombie, c'est à dire qu'il s'est déjà terminé mais que son père n'a pas encore lu sa valeur de retour avec wait().
- EPERM
- Le processus appelant n'a pas l'autorisation d'envoyer un signal à l'un des processus concernés. Pour qu'un processus ait le droit d'envoyer un signal à un autre processus pid il doit avoir des privilèges de Super-Utilisateur, ou avoir un UID réel ou effectif égal à l'ID réel ou sauvegardé du processus récepteur. Dans le cas de SIGCONT, il suffit que les processus émetteur et récepteur appartiennent à la même session.
NOTES
On ne peut envoyer au processus numéro un (init) que des signaux pour lesquels il a expressément installé un gestionnaire. Ceci évite que le système soit arrêté accidentellement.
POSIX 1003.1-2001 réclame que kill(-1,sig) envoie sig à tous les processus accessibles par le processus appelant, sauf à certains processus système dépendant de l'implémentation. Linux autorise un processus à s'envoyer un signal à lui-même, mais l'appel kill(-1,sig) n'envoie pas le signal au processus appelant.
HISTORIQUE
Suivant les différentes versions du noyau, Linux a utilisé différentes règles pour les permissions nécessaires à un processus non-privilégié pour envoyer un signal a un autre processus. Dans les noyaus 1.0 à 1.2.2, un signal pouvait être envoyé si l'UID effectif de l'émetteur correspondait à celui du récepteur, ou si l'UID réel de l'émetteur correspondant à celui du récepteur. Dans les noyaux 1.2.3 à 1.3.77, un signal pouvait être envoyé si l'UID effectif de l'émetteur correspondait à UID effectif ou réel du récepteur. Les règles actueles, conformes à POSIX 1003.1-2001 ont été adoptées dans le noyau 1.3.78.
CONFORMITÉ
SVr4, AT&T, POSIX.1, X/OPEN, BSD 4.3
VOIR AUSSI
TRADUCTION
Christophe Blaess, 1996-2003.