Linux

CentOS 5.3

kill(2)


KILL

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 pour lesquels le processus appelant à la permission d’envoyer des signaux, 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.

Pour qu’un processus puisse envoyer un signal, il doit avoir les privilèges nécessaires (sous Linux : avoir la capacité CAP_KILL),oul’UIDeffectifouréelduprocessusquienvoielesignal doit être égal au Set−UID sauvé ou réel du processus cible. Dans le cas du signal SIGCONT, il suffit que les processus envoyant et recevant le signal appartiennent à la même session.

VALEUR RENVOYÃE

En cas de réussite (au moins un signal a été envoyé) 0 est renvoyé, en cas d’échec −1 est renvoyé et errno contient le code d’erreur.

ERREURS

EINVAL

Numéro de signal invalide.

EPERM

Le processus appelant n’a pas l’autorisation d’envoyer un signal aux processus cibles.

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().

NOTES

Les seuls signaux que l’on puisse envoyer au processus numéro un, le processus init, sont ceux pour lesquels init a explicitement installé un gestionnaire. Ceci évite que le système soit arrêté accidentellement.

POSIX.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.

POSIX.1-2001 réclame que si un processus s’envoie un signal à lui-même que ce processus ne bloque pas le signal et qu’aucun autre thread ne l’a non bloqué ou et en attente dans un sigwait(), au moins un signal non bloqué doit être délivré au thread qui l’a envoyé avant kill().

BOGUES

Dans les noyaux 2.6 jusqu’à 2.6.7 y compris, il y avait un bogue qui faisait que lorsqu’on envoyait des signaux à un groupe de processus, kill() échouait avec l’erreur EPERM si l’appelant avait la permission d’envoyer le signal à un membre quelconque (plutôt qu’à tous les membres) du groupe de processus. En dépit de ce retour d’erreur, le signal était délivré à tous les processus pour lesquels l’appelant avait la permission de signaler.

HISTORIQUE LINUX

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 à l’UID effectif ou réel du récepteur. Les règles actuelles, conformes à POSIX.1-2001, ont été adoptées dans le noyau 1.3.78.

CONFORMITÃ

SVr4, BSD 4.3, POSIX.1-2001

VOIR AUSSI

_exit(2), killpg(2), signal(2), sigqueue(2), exit(3), capabilities(7), signal(7)

TRADUCTION

Ce document est une traduction réalisée par Christophe Blaess <http://www.blaess.fr/christophe/> le 10 octobre 1996 et révisée le 14 août 2006.

L’équipe de traduction a fait le maximum pour réaliser une adaptation française de qualité. La version anglaise la plus à jour de ce document est toujours consultable via la commande : « LANG=C man 2 kill ». N’hésitez pas à signaler à l’auteur ou au traducteur, selon le cas, toute erreur dans cette page de manuel.


kill(2)