Ç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/

