Ne vous est-il jamais arrivé de devoir quitter votre session actuelle alors qu'un programme en cours d'exécution n'a pas terminé son traitement ? Le contraire serait étonnant. Par exemple, vous avez lancé l'extraction d'une base de données par SSH pour en faire un backup et vous n'avez pas le temps d'attendre gentiment devant votre terminal que son exécution se termine.
Le fait est que lorsqu'on demande de fermer sa session (commande exit
,
CTRL+D
, ...), le processus faisant tourner le shell envoie un signal
SIGHUP à tous ses enfants pour demander leur arrêt. Des tâches comme
l'extraction d'une base de données citée dans mon exemple prendront fin à
l'instant où la session sera fermée.
Pour modifier ce comportement, il existe une commande appelée nohup
qui permet
d'indiquer à un programme de ne pas réagir lors de la réception d'un signal
SIGHUP et donc de poursuivre son exécution même après la fermeture de la session
ayant servi à le lancer. Concrètement, il faut passer en argument à la commande
nohup
la commande désirée à proprement parlé pour empêcher sa fermeture. Les
canaux de sortie et d'erreur standards sont redirigés par défaut vers un fichier
appelé nohup.out
. On peut bien entendu préciser explicitement vers quel
fichier on veut rediriger ces canaux.
Je précise qu'il est préférable de lancer la commande en tâche de fond pour pouvoir fermer sa session proprement comme dans l'exemple suivant :
nohup mysqldump -u root -pmonsuperpassword --all-databases > mon_backup.db &
exit
Lors de l'ouverture de la prochaine session, vous trouverez donc le résultat de
la commande mysqldump
dans le fichier mon_backup.db
.
Aussi simple que ça !