web-dev-qa-db-fra.com

BASH - Vérifier si le PID existe

Je souhaite bloquer l'exécution de mon script BASH jusqu'à la fermeture d'un processus (le PID est stocké dans une variable). Je pense
while [ PID IS RUNNING]; do
sleep 500
done
 

La plupart des exemples que j'ai vus utilisent/dev/null, ce qui semble nécessiter root. Y a-t-il un moyen de faire cela sans avoir besoin de root?

Merci beaucoup d'avance!

19
JohnP

kill -s 0 $pid renverra le résultat si $pid est en cours d'exécution, échec sinon, sans envoyer de signal au processus, vous pouvez donc l'utiliser directement dans votre instruction if.

wait $pid attendra ce processus, remplaçant votre boucle entière.

32
moonshadow

On dirait que tu veux

wait $pid

qui retournera quand $pid finira.

Sinon, vous pouvez utiliser

ps -p $pid

vérifier si le processus est toujours actif (c'est plus efficace que kill -0 $pid car il fonctionnera même si vous ne possédez pas le pid).

19
sligocki

Vous pouvez rechercher la présence du répertoire /proc/YOUR_PID.

7

J'utilise toujours ce qui suit tail -f /dev/null --pid $PID. Il ne nécessite pas de boucle explicite et ne se limite pas aux pids enfants de votre Shell.

3
qdiesel

ps --pid $pid &>/dev/null

renvoie 0 s'il existe, 1 sinon

1
Matt Kneiser