Commande nohup : utilisation, nohup.out et continuer l'exécution après la fermeture du terminal
Pour qu'une tâche continue de tourner même si vous fermez le terminal ou si la connexion SSH est coupée, lancez-la avec la commande nohup. nohup exécute la commande en lui faisant ignorer le signal de déconnexion (SIGHUP) envoyé à la fermeture du terminal. Sur un serveur AlmaLinux 9, un sleep lancé avec nohup et un sleep lancé sans ont été démarrés ensemble, puis le terminal a été fermé : seul celui lancé avec nohup a continué de tourner.
Les sorties ci-dessous proviennent d'un serveur AlmaLinux 9.8 (compte root) et d'un serveur Debian 12 (compte ordinaire). Un sleep remplace une longue tâche, et pour l'arrêter, seul le PID obtenu au lancement a été indiqué. Les heures sont affichées en UTC.
1️⃣ Utiliser la commande nohup
nohup se place devant la commande à exécuter, et le & en fin de commande permet une exécution en arrière-plan. D'après le manuel officiel GNU, nohup lui-même n'envoie pas la commande en arrière-plan : sans le &, l'invite ne revient qu'à la fin de la commande.
nohup sleep 300 &[1] 3431609
nohup: ignoring input and appending output to 'nohup.out'[1] est le numéro de tâche et 3431609 le PID du processus lancé. Le message qui suit indique que la saisie au clavier est ignorée et que la sortie est ajoutée au fichier nohup.out.
Le PID de la tâche que vous venez de lancer reste dans $!. Vérifiez-le avec [echo $!] juste après le lancement et notez-le : vous utiliserez ce même numéro pour consulter son état ou pour l'arrêter.
echo $!3431609À la fermeture du terminal, le shell reçoit le signal de déconnexion et envoie le même signal aux tâches qu'il a lancées (d'après le manuel officiel de Bash). Pour le vérifier, [nohup sleep 300 &] et, sans nohup, [sleep 301 &] ont été lancés ensemble dans un nouveau terminal.
sleep 301 &[2] 3432892jobs -l[1]- 3432883 Running nohup sleep 300 &
[2]+ 3432892 Running sleep 301 &Les deux tâches étant en Running, la fenêtre du terminal a été fermée, puis les deux PID ont été vérifiés avec ps depuis un autre shell.
ps -p 3432883,3432892 -o pid,stat,etime,cmd PID STAT ELAPSED CMD
3432883 S 00:05 sleep 300Seul sleep 300, lancé avec nohup, est resté ; sleep 301, lancé sans nohup, s'est arrêté à la fermeture du terminal.
Un processus lancé avec nohup ressemble à un téléphone en mode Ne pas déranger.
nohup est une commande du paquet coreutils. La version installée se lit sur la première ligne de --version. Le serveur AlmaLinux 9.8 avait la 8.32 et le serveur Debian 12 la 9.1.
nohup --version | head -1nohup (GNU coreutils) 8.32nohup --version | head -1nohup (GNU coreutils) 9.12️⃣ nohup.out et redirection de la sortie
Si vous n'indiquez pas où va la sortie, nohup ajoute la sortie de la commande à nohup.out dans le dossier courant. Le nohup.out tout juste créé faisait 0 octet, avec les droits -rw-------, en lecture et écriture pour le seul utilisateur qui l'a créé.
ls -l nohup.out-rw------- 1 root root 0 Oct 28 23:04 nohup.outLe manuel officiel GNU explique que nohup crée nohup.out de sorte que seul l'utilisateur qui l'a créé puisse le lire et l'écrire, quel que soit le réglage umask. S'il ne peut pas écrire dans le dossier courant, il écrit dans $HOME/nohup.out, dans le dossier personnel, et s'il ne peut pas y écrire non plus, il n'exécute pas la commande.
Une commande qui produit une sortie a été lancée avec nohup : une fois la commande terminée, la sortie est restée dans nohup.out.
nohup sh -c 'echo start; sleep 2; echo end' &[1] 3431985
nohup: ignoring input and appending output to 'nohup.out'cat nohup.outstart
end
[1]+ Done nohup sh -c 'echo start; sleep 2; echo end'Le Done de la dernière ligne est l'avis du shell indiquant que la tâche est terminée. nohup.out n'est pas recréé à chaque exécution mais complété à la fin du même fichier : si vous lancez plusieurs tâches depuis le même dossier, leurs sorties se mélangent dans un seul fichier.
Pour séparer le journal de chaque tâche, indiquez le fichier de sortie avec > et envoyez aussi la sortie d'erreur dans le même fichier avec 2>&1.
nohup sh -c 'echo start; sleep 300' > job.log 2>&1 &[1] 3432059cat job.lognohup: ignoring input
startAvec 2>&1 en plus, le terminal n'a affiché que le numéro de tâche et le PID, et le message de nohup [nohup: ignoring input] a été écrit sur la première ligne du fichier journal.
Si vous ajoutez seulement > sans 2>&1, le terminal affiche un message indiquant que la sortie d'erreur est redirigée vers le fichier de la sortie standard.
nohup sleep 300 > job2.log &[2] 3432097
nohup: ignoring input and redirecting stderr to stdoutEnvoyez vers /dev/null la sortie des tâches que vous n'avez pas besoin de garder. Là aussi, le terminal n'a affiché que le numéro de tâche et le PID.
nohup sleep 300 > /dev/null 2>&1 &[3] 3432137Le tableau ci-dessous montre, pour les quatre façons de lancer la commande, où est allée la sortie et quel message est apparu dans le terminal.
| Façon de lancer | Destination de la sortie | Message dans le terminal |
|---|---|---|
| nohup commande & | nohup.out du dossier courant | nohup: ignoring input and appending output to 'nohup.out' |
| nohup commande > fichier & | Fichier indiqué (sortie d'erreur comprise) | nohup: ignoring input and redirecting stderr to stdout |
| nohup commande > fichier 2>&1 & | Fichier indiqué | Aucun (le message va sur la première ligne du fichier) |
| nohup commande > /dev/null 2>&1 & | Supprimée | Non |
3️⃣ Vérifier et arrêter un processus nohup
La liste jobs ne montre que les tâches lancées depuis le shell courant : après avoir fermé le terminal et vous être reconnecté, vérifiez donc un processus nohup avec ps -p et son PID. Tant que vous restez dans le même shell, jobs -l affiche ensemble le numéro de tâche, le PID et l'état.
jobs -l[1]+ 3431609 Running nohup sleep 300 &Indiquez un PID après ps -p et choisissez les colonnes avec -o : seule la ligne de ce processus s'affiche. Le S de STAT signifie qu'il dort en attendant un événement, et ELAPSED est le temps écoulé depuis son démarrage.
ps -p 3431609 -o pid,stat,etime,cmd PID STAT ELAPSED CMD
3431609 S 00:03 sleep 300Pour l'arrêter, utilisez kill suivi du PID.
kill 3431609kill n'a rien affiché, et à l'exécution suivante de jobs, la tâche est apparue comme Terminated avant de disparaître de la liste.
jobs[1]+ Terminated nohup sleep 300En relançant ps avec le même PID, seul l'en-tête s'est affiché, ce qui a confirmé la fin du processus.
ps -p 3431609 -o pid,stat,etime,cmd PID STAT ELAPSED CMDnohup n'ignore que le signal de déconnexion : envoyer ce même signal directement avec [kill -HUP] ne l'arrête donc pas. kill -HUP a été envoyé à sleep 305, lancé avec nohup, et à sleep 306, lancé sans.
kill -HUP 3437119 3437128La vérification suivante avec jobs -l n'a montré que la tâche nohup encore en Running, tandis que sleep 306 s'est terminé avec Hangup.
jobs -l[1]- 3437119 Running nohup sleep 305 &
[2]+ 3437128 Hangup sleep 306Si vous n'indiquez pas de signal à kill, il envoie SIGTERM : une tâche lancée avec nohup s'arrête donc aussi avec [kill PID].
4️⃣ Commande nohup et disown comparés, options
🔲 nohup et disown comparés
disown est une commande interne de bash qui s'utilise sur des tâches déjà lancées : elle détache après coup, du signal de déconnexion du terminal, une tâche lancée avec & mais sans nohup. disown ne redirige pas la sortie vers nohup.out : pour une tâche qui produit une sortie, fixez sa destination avec > fichier dès le lancement.
D'après le manuel officiel de Bash, disown sans option retire la tâche de la liste jobs, tandis que disown -h la laisse dans la liste et empêche seulement le signal de déconnexion de l'atteindre. D'abord, sleep 302 a été lancé, puis disown a été exécuté.
sleep 302 &[1] 3433230disowndisown n'a rien affiché, et jobs -l, exécuté juste après, a renvoyé un résultat vide.
jobs -lEnsuite, sleep 303 a été lancé et disown -h a été exécuté sur le numéro de tâche %1.
sleep 303 &[1] 3433343disown -h %1La vérification avec jobs -l a montré la tâche toujours dans la liste.
jobs -l[1]+ 3433343 Running sleep 303 &Un sleep 304 de plus, sans aucun traitement, a été lancé, le terminal a été fermé, et les trois PID ont été vérifiés depuis un autre shell.
sleep 304 &[2] 3433474ps -p 3433230,3433343,3433474 -o pid,stat,etime,cmd PID STAT ELAPSED CMD
3433230 S 00:11 sleep 302
3433343 S 00:08 sleep 303Les deux tâches traitées avec disown et disown -h sont restées, et seul sleep 304, sans traitement, s'est arrêté. Voici les quatre méthodes comparées.
| Méthode | Quand l'utiliser | Liste jobs | Après la fermeture du terminal | Sortie |
|---|---|---|---|---|
| nohup commande & | Au lancement | Reste | Reste | nohup.out ou fichier indiqué |
| commande & puis disown | Après le lancement | Ignorée | Reste | Inchangée |
| commande & puis disown -h | Après le lancement | Reste | Reste | Inchangée |
| commande & seul | — | Reste | Terminé | Inchangée |
Pour un travail où il faut rappeler l'écran de la session et continuer à taper, un multiplexeur de terminal comme tmux convient ; pour un travail lancé une fois dont on récupère seulement le résultat dans un fichier, nohup suffit.
🔲 Options de la commande nohup
📌 Options principales : résultats de cet article
| Option | Rôle | Résultat dans cet article | |
|---|---|---|---|
| --version | Affiche la version et quitte | Serveur AlmaLinux 9.8 : nohup (GNU coreutils) 8.32, serveur Debian 12 : nohup (GNU coreutils) 9.1 |
📎 Autres options : selon le manuel officiel
| Option | Rôle | |
|---|---|---|
| --help | Affiche l'aide et quitte |
🔲 Simulateur de la commande nohup
Dans le simulateur ci-dessous, lancez une tâche avec nohup, fermez le terminal et reconnectez-vous avec le bouton 🔌, puis voyez par vous-même quels processus restent.
🔢 FAQ & contenus recommandés
Planification
Linux : configurer crontab
Configuration de crontab, le planificateur Linux qui enregistre des tâches à répéter à heure fixe, comme les sauvegardes ou le nettoyage des journaux.
Processus
Commande top sous Linux (vérifier l'utilisation du CPU et de la mémoire)
La commande top, qui affiche en temps réel l'utilisation du CPU et de la mémoire par processus.
ℹ️ Mention d'affiliation
Le contenu de ce site contient des liens d'affiliation. Lorsqu'un visiteur achète un produit ou un service via l'un de ces liens, le site perçoit une commission du vendeur. Le montant payé par l'acheteur(il baisse lors des promotions ↓), lui, n'augmente pas. Les prix, remises et stocks indiqués correspondent à la date de rédaction et peuvent différer ; vérifiez-les donc auprès du vendeur avant d'acheter. Les produits sont choisis et évalués selon nos propres critères, et les commissions n'influencent ni l'ordre de présentation ni le contenu des évaluations.