Bash : pid d'un processus en arrière plan

Anne bash

En bash :

  • la variable $! donne le numéro du dernier processus lancé en arrière plan ;
  • wait <pid> attend la terminaison du processus <pid> ;
  • la valeur de retour de wait <pid> est celle de <pid> ;

On peut donc écrire :

$cmd 2>&1 &
pid=$!
echo "Process: $pid (to stop it, use: kill $pid)"
wait $pid
ret=$?

On peut aussi vouloir tuer le processus quand un certain message apparait dans le log. On écrit alors:

$cmd > $log 2>&1 &
pid=$!
tail -f --pid=$pid $log | grep -q fatal && kill $pid &
wait $pid
ret=$?

Notes :

  • l’option --pid=$pid de tail s’utilise avec l’option -f pour terminer après l’arrêt du processus $pid ;
  • la commande wait peut aussi s’utiliser sans argument pour attendre la terminaison de tous les processus en arrière plan. Elle retourne alors 0.

Voir aussi :