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!
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.
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).
Vous pouvez rechercher la présence du répertoire /proc/YOUR_PID
.
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.
ps --pid $pid &>/dev/null
renvoie 0 s'il existe, 1 sinon