Commande nohup : utilisation, nohup.out et continuer l'exécution après la fermeture du terminal

Environnement de testFamille RHELAlmaLinux 9.8coreutils 8.32Compte rootDebian 12 · coreutils 9.1 compte standardVérifié le 2026-11-05
Commandes de processus et de planificationnohupEmplacement/usr/bin/nohup
Continue de tourner même 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

  • ↪️ Le & final et ce qui se passe à la fermeture du terminal

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] 3432892
jobs -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 300

Seul 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 -1
nohup (GNU coreutils) 8.32
nohup --version | head -1
nohup (GNU coreutils) 9.1

2️⃣ nohup.out et redirection de la sortie

  • ↪️ Choisir un fichier journal et /dev/null

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.out

Le 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.out
start
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] 3432059
cat job.log
nohup: ignoring input
start

Avec 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 stdout

Envoyez 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] 3432137

Le 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 lancerDestination de la sortieMessage dans le terminal
nohup commande &nohup.out du dossier courantnohup: 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éeNon

3️⃣ Vérifier et arrêter un processus nohup

  • ↪️ jobs, ps, kill

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 300

Pour l'arrêter, utilisez kill suivi du PID.

kill 3431609

kill 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 300

En 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 CMD

nohup 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 3437128

La 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 306

Si 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

  • ↪️ disown -h, quand choisir tmux, et récapitulatif des 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] 3433230
disown

disown n'a rien affiché, et jobs -l, exécuté juste après, a renvoyé un résultat vide.

jobs -l

Ensuite, sleep 303 a été lancé et disown -h a été exécuté sur le numéro de tâche %1.

sleep 303 &
[1] 3433343
disown -h %1

La 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] 3433474
ps -p 3433230,3433343,3433474 -o pid,stat,etime,cmd
    PID STAT     ELAPSED CMD
3433230 S          00:11 sleep 302
3433343 S          00:08 sleep 303

Les 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éthodeQuand l'utiliserListe jobsAprès la fermeture du terminalSortie
nohup commande &Au lancementResteRestenohup.out ou fichier indiqué
commande & puis disownAprès le lancementIgnoréeResteInchangée
commande & puis disown -hAprès le lancementResteResteInchangée
commande & seul—ResteTerminé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

OptionRôleRésultat dans cet article
--versionAffiche la version et quitteServeur AlmaLinux 9.8 : nohup (GNU coreutils) 8.32, serveur Debian 12 : nohup (GNU coreutils) 9.1

📎 Autres options : selon le manuel officiel

OptionRôle
--helpAffiche 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.

Simulateur de la commande nohupcoreutils 8.32
[root@server work]#
Il fonctionne uniquement dans votre navigateur et ne lance aucun vrai processus. La durée de sleep suit l'horloge réelle, et ↑↓ rappellent les commandes saisies auparavant.

🔢 FAQ & contenus recommandés

D'après le manuel officiel GNU, nohup se termine avec 125 si nohup lui-même échoue, 126 si la commande a été trouvée mais n'a pas pu être exécutée, et 127 si la commande est introuvable. Sur un serveur AlmaLinux 9, nohup seul sans commande a donné 125, ./job.sh sans droit d'exécution 126 et la commande inexistante nosuchcmd 127.

nohup ne modifie pas la valeur nice : utilisez nice avec lui, comme dans [nohup nice -n 10 sleep 307 &]. Le sleep lancé ainsi affichait dans ps 10 dans la colonne NI et SN dans STAT, avec le N qui signale une priorité basse.

La commande nohup n'a que deux options, [--help] et [--version]. D'après le manuel officiel GNU, les options se placent avant la commande à exécuter.

ℹ️ 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.

Laisser un commentaire

Votre adresse e-mail ne sera pas publiée. Les champs obligatoires sont indiqués avec *

Prouvez que vous êtes humain : 9   +   2   =