Mémo BASH: gestion des process

Ça fait un bail que je n’ai pas posté, je profite de l’écriture d’un mémo interne pour me permettre de le copier-coller ici 😉

Comme ces derniers temps j’ai écrit pas mal de scripts de maintenance Bash, je souhaite partager avec vous mes connaissances sur la gestion des process avec le shell (ce qui est quand-même la principale raison pour laquelle on écrirait du shell, outre la portabilité):

Exécution

$command lance la commande et attend son retour
$command & lance la commande en arrière plan
wait attend la fin de tous les process en arrière plan du process courant (code de retour = 0)
wait $PID attend la fin du process caractérisé par ce PID (code de retour = code de retour du process attendu, s’il y en a plusieurs c’est le dernier)

Signaux

kill -0 $PID échoue si aucun process avec ce PID n’existe
trap $command $signal intercepter le signal et exécuter la command indiquée (idéal pour affecter des commandes de nettoyage en post-execute),
exemple: trap 'echo fin' EXIT INT TERM

Variables spéciales

$$ le PID du process courant
$! le PID du dernier process lancé en arrière plan
$? le code de retour de la dernière commande terminée (dans un trap ça peut être le code de retour du process en cours, très utile)

Redirections

$command 1> $file redirige l’output standard vers un fichier
$command 2> $file redirige l’output erreur vers un fichier
$command 1>&2 tout rediriger vers l’output erreur
$command 2>&1 tout rediriger vers l’output standard
$command &> $file tout rediriger vers un fichier
exec &> $file toutes les commandes exécutées après cet appel verront leurs sorties redirigées vers un fichier (exec est en fait bien plus puissant que ça)

Exemple bidon

#!/bin/bash
(sleep 2 && echo 1 && exit 1) &
PID1=$!
(sleep 4 && echo 2 && exit 2) &
PID2=$!
trap "echo Nettoyage... && kill -9 $PID1 $PID2" INT TERM
trap "echo Terminé (code $?)!" EXIT INT TERM
wait $PID1 $PID2
echo code de retour du sleep: $?

N’hésitez pas à partager vos protips de gros barbu en commentaire \o/

Laisser un commentaire