NOM
kill - Envoyer un signal à un processus
SYNOPSIS
#include <sys/types.h>
#include <signal.h>
int kill(pid_t pid, int sig);
Exigences de macros de test de fonctionnalités pour la glibc (voir
feature_test_macros(7)) :
kill() : _POSIX_C_SOURCE >= 1 || _XOPEN_SOURCE || _POSIX_SOURCE
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 dont
l’identifiant est indiqué par 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 dont l’identifiant est -pid.
Si sig vaut 0, aucun signal n’est envoyé mais les conditions d’erreur
sont vérifiées ; ceci peut être utilisé pour vérifier l’existence d’un
identifiant de processus ou d’un identifiant de groupes de processus.
Pour qu’un processus puisse envoyer un signal, il doit avoir les
privilèges nécessaires (sous Linux : avoir la capacité CAP_KILL), ou
l’UID effectif ou réel du processus qui envoie le signal 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(2).
CONFORMITÉ
SVr4, BSD 4.3, POSIX.1-2001.
NOTES
On ne peut envoyer au processus numéro 1 (init) que des signaux pour
lesquels il a expressément 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 thread ne bloque pas le signal et qu’aucun autre thread ne l’a
non bloqué ou et en attente dans un sigwait(3), au moins un signal non
bloqué doit être délivré au thread courant avant que l’appel à kill()
ne revienne.
Notes sur 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 noyaux 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.
BOGUES
Dans les noyaux 2.6 jusqu’à 2.6.7 inclus, en raison d’un bogue,
lorsqu’un signal était envoyé à un groupe de processus, kill() échouait
avec l’erreur EPERM si l’appelant avait permission d’envoyer le signal
à lun des membres du groupe, mais pas à tous. Malgré ce code d’erreur,
le signal était bien envoyé à tous les processus pour lesquels
l’appelant en avait la permission.
VOIR AUSSI
_exit(2), killpg(2), signal(2), sigqueue(2), tkill(2), exit(3),
capabilities(7), credentials(7), signal(7)
COLOPHON
Cette page fait partie de la publication 3.23 du projet man-pages
Linux. Une description du projet et des instructions pour signaler des
anomalies peuvent être trouvées à l’adresse
http://www.kernel.org/doc/man-pages/.
TRADUCTION
Cette page de manuel a été traduite et mise à jour par Christophe
Blaess <http://www.blaess.fr/christophe/> entre 1996 et 2003, puis par
Alain Portal <aportal AT univ-montp2 DOT fr> jusqu’en 2006, et mise à
disposition sur http://manpagesfr.free.fr/.
Les mises à jour et corrections de la version présente dans Debian sont
directement gérées par Julien Cristau <jcristau@debian.org> et l’équipe
francophone de traduction de Debian.
Veuillez signaler toute erreur de traduction en écrivant à
<debian-l10n-french@lists.debian.org> ou par un rapport de bogue sur le
paquet manpages-fr.
Vous pouvez toujours avoir accès à la version anglaise de ce document
en utilisant la commande « man -L C <section> <page_de_man> ».