kill(2) 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 (consultez feature_test_macros(7)) :

kill() : _POSIX_C_SOURCE >= 1 || _XOPEN_SOURCE || _POSIX_SOURCE

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 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. (Historiquement, les règles étaient différentes. Consultez les NOTES.)

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
Un signal invalide a été spécifié.
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 du processus émetteur correspondait à celui du processus cible, ou si l'UID réel du processus émetteur correspondait à celui du processus cible. Dans les noyaux 1.2.3 à 1.3.77, un signal pouvait être envoyé si l'UID effectif du processus émetteur correspondait à l'UID effectif ou réel du processus cible. 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 n'avait pas la permission d'envoyer le signal à tous les membres du groupe. En dépit de ce code d'erreur, le signal était cependant bien envoyé à tous les processus pour lesquels l'appelant en avait la permission.

COLOPHON

Cette page fait partie de la publication 3.65 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

Depuis 2010, cette traduction est maintenue à l'aide de l'outil po4a <http://po4a.alioth.debian.org/> par l'équipe de traduction francophone au sein du projet perkamon <http://perkamon.alioth.debian.org/>.

Christophe Blaess <http://www.blaess.fr/christophe/> (1996-2003), Alain Portal <http://manpagesfr.free.fr/> (2003-2006). Julien Cristau et l'équipe francophone de traduction de Debian (2006-2009).

Veuillez signaler toute erreur de traduction en écrivant à <[email protected]> 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> ».