web-dev-qa-db-fra.com

Que fait `kill -0 $ pid` dans un script shell?

Fondamentalement, quel signal "0" représente-t-il, car ici je vois les numéros de SIGNAL commençant à 1.

135
gjain

C'est une bonne question parce que ...

... il peut être difficile de trouver de la documentation sur ce signal spécial. Malgré ce que d’autres ont dit, la seule mention de ce signal dans man 1 kill dans les systèmes basés sur Debian est:

Les signaux particulièrement utiles incluent HUP, INT, KILL, STOP, CONT et 0.

Pas particulièrement utile, surtout si vous ne savez pas déjà ce que le signal fait. Il n’est pas non plus répertorié par le résultat de kill -l, donc vous ne le saurez pas à moins que vous ne le sachiez déjà.

Où le trouver documenté

Sur les systèmes Debian et Ubuntu, le résultat de man 2 kill dit en partie:

Si sig est égal à 0, aucun signal n'est envoyé, mais le contrôle des erreurs est toujours effectué. Ceci peut être utilisé pour vérifier l'existence d'un ID de processus ou d'un ID de groupe de processus.

A quoi ça sert

Vous pouvez utiliser kill -0 pour vérifier si un processus est en cours d'exécution. Considérez ces exemples.

# Kill the process if it exists and accepts signals from
# the current user.
sleep 60 &
pid=$!
kill -0 $pid && kill $pid

# Check if a PID exists. When missing, this should result
# in output similar to:
#    bash: kill: (6228) - No such process
#    Exit status: 1
kill -0 $pid; echo "Exit status: $?"

Vous pouvez aussi utiliser kill -0 pour déterminer si l'utilisateur actuel est autorisé à signaler un processus donné. Par exemple:

# See if you have permission to signal the process. If not,
# this should result in output similar to:
#     bash: kill: (15764) - Operation not permitted
#     Exit status: 1
Sudo sleep 60 &
kill -0 $!; echo "Exit status: $?"
124
Todd A. Jacobs

Cette commande vérifie si le processus contenant le PID dans $ pid est actif.

6
Fritz G. Mehner

Kill -0 $ pid consiste à vérifier si le processus avec pid existe ou non.

Soyez prudent lorsque vous utilisez 'kill -0 $ pid' pour vérifier l'existence du processus car

  1. Une fois que le processus prévu se termine, son pid peut être attribué à un autre processus nouvellement créé. (On ne peut donc pas être aussi sûr que ce processus soit actif ou non)

  2. Dans le cas d’un processus Zombie, l’enfant attend que le parent appelle. Ici, il contient le pid $ et donne le résultat positif tant que ce processus n’est pas en cours.

4
Sandeep_black

http://djangstorm.com/Content/kill.html . Erreur de vérification, se réfère ici aux privilèges disponibles pour exécuter la commande par l'utilisateur.

1
Rane

Kill -0 $ pid utilisé pour vérifier si un processus en cours d'exécution avec $ pid est actif ou non. Mais cela peut être délicat, car l’ID de processus peut être réaffecté une fois que le processus est terminé et que le nouveau processus s’exécute. On peut utiliser killall -0 pour savoir si un processus particulier est en cours d'exécution ou non.

1
user9344710