Utilisation de la commande nohup


nohup
Nohup est une commande qui permet de lancer un processus qui restera actif même après la déconnexion de l'utilisateur.

Cette dernière peut s'avérer très utile si on la combine au '&' qui permet de lancer un processus en arrière plan.

Prenons un exemple concret : je souhaite effectuer une action sur un serveur distant en ssh, mais je n'ai pas envie d'attendre la fin de la commande pour pouvoir me déconnecter.

Ici, je lance le téléchargement d'un gros fichier :

# ssh pti-seb@monserveur
# nohup wget ftp://...../Fedora-8-i386-rescuecd.iso &
# exit

A chaque utilisation, la commande crée un fichier de log nommé nohup.out, permettant de consulter les messages qui auraient dû s'afficher sur la console. On pourra visionner le contenu comme ceci :

# more nohup.out

Nohup permet donc en quelque sorte, de détacher complètement un processus de son utilisateur.


13 Commentaires pour "Utilisation de la commande nohup"

Flux des commentaires de cet article Ajouter un commentaire
  •  

    Bonjour,

    Il me semble que nohup crée lui-même un fichier nohup.out avec tous les logs.

    Ne suffit-il pas?

    Sinon très bonne idée cet article, nohup fonctionne avec presque toutes les commandes, très très pratique !

    atchoum , le 4 décembre 2007 à 19:09
  •  

    Autre commande sympatique, il y a screen qui permet beaucoup plus.
    La différence entre les deux, nohup ne maintient pas d'entrée standard à la déconnexion, screen le fait. Donc si vous n'en avez pas besoin (ie un processus serveur), nohup est parfait.

    PatLeNain , le 4 décembre 2007 à 19:14
  •  

    @atchoum : j'avais même pas remarqué qu'il y avait un fichier nohup.out. Je vais modifier l'article.

    @PatLeNain : tu as raison, screen est un peu plus complet mais aussi un peu plus compliiqué à utiliser, nohup à l'avantage d'être simple et rapide.

    pti-seb , le 4 décembre 2007 à 19:23
  •  

    Autre petite astuce liée : la commande "disown". En fait, c'est bash qui termine une application quand on ferme un terminal ou qu'on quitte une session puisque tous les processus qu'on lance sont des processus fils de bash.

    La commande disown indique à bash de se "déposséder" du processus et de le redonner à init (le processus "1"). Ainsi, par la suite quand on quitte bash, le processus reste en arrière plan.

    nohup est différent dans le fonctionnement car il indique que le signal "TERM" de fermeture de l'application ne sera pas reçu par l'application mais intercepté par "nohup". C'est justement ce signal que bash envoie quand la session est fermée.

    Je considère donc que "disown" est plus doux que "nohup" car bash est au courant qu'il est dépossédé d'un processus et en plus, la sortie standard n'est pas supprimée du terminal : on continue à voir les messsages de l'application.

    Pour l'utiliser :
    $ macommande &
    $ disown %1

    où 1 représente le premier job "dépossédé" : on peut en déposséder plusieurs comme cela (il faut alors taper le chiffre entre crochets renvoyé par bash : les numéros se suivent. Pour avoir la liste, taper "jobs").

    yoho , le 4 décembre 2007 à 20:09
  •  

    @yoho : merci pour ce complément d'informations, je ne connaisais pas disown, d'ailleurs j'ai l'impression qu'on en parle jamais, car la commande nohup, je l'avais déjà vu dans pas mal d'article avant de l'essayer.

    En revanche j'ai remarqué un truc assez génant, si veux utiliser disown avec l'exemple que j'ai donné, cela est impossible, car quand je lance el wget avec le '&', il ne me rend pas vraiment la main. Et il affiche en permanence des informations dans la console...

    pti-seb , le 4 décembre 2007 à 22:05
  •  

    la commande est très utile, mais en l'occurence pour l'exemple de wget, l'option -b suffit:
    wget -b url
    il produit un fichier wget-log (puis wget-log.x s'il en existe déjà un) pour la progression.

    tuxce , le 4 décembre 2007 à 23:39
  •  

    @Tuxe : je ne connaissais pas cette option, j'ai surtout pris wget pour avoir un exemple concret, personnelement je m'en sert pour d'autres tâches, comme faire des backups en tar.gz ...

    pti-seb , le 5 décembre 2007 à 09:02
  •  

    Argh ! j'avais écrit un commentaire long et paf : "Access denied" :( Plus rien dans le cache de firefox :(

    Bon, en gros je disais que la sortie standard n'est effectivement pas détachée, c'est ce que j'ai essayé d'expliquer. Ça a des avantages et des inconvénients.

    Sinon, exemple concret : j'ouvre un terminal et je tapes "konqueror". Pour rattraper la main, je tapes Ctrl+Z et bg, mais konqueror reste "attaché" à la console : si je quitte le terminal, konqueror se ferme aussi. C'est là que "disown %1" intervient : les deux applis sont désormais indépendantes.

    yoho , le 5 décembre 2007 à 11:32
  •  

    Screen n'est pas beaucoup plus complexe à utiliser. Son principal intérêt réside dans la facilité avec laquelle on accroche et décroche un processus du terminal.

    Imaginons rapidement le cas ou l'on lance un processus, que l'on décroche, ce processus fonctionne en tache de fond, je veux revenir voir ou il en est et pourquoi pas à distance, avec screen je peu facilement le ré-accroché à mon terminal.

    Je ne pense pas que cela soit possible avec nohup par exemple ou encore disown.

    freak0 , le 6 décembre 2007 à 00:09
  •  

    @yoho : opera est meilleur dans ce genre de situations, tu retrouve ton texte en revenant en arrière.

    Flo , le 23 février 2011 à 13:28
  •  

    Merci pour cet article ! Même 4 ans plus tard, il est toujours intéressant. Merci aussi pour les commentaires, qui permettent de voir différentes façon de dissocier un processuce du terminal :)
    Je pense que chaque commande a ses avantages et ses inconvénients, et que sage est celui qui les utilise toutes au bon moment :)

    zifnak , le 26 juillet 2011 à 14:54
  •  

    Bonjour,

    Désolé de déterrer ce sujet. J'espère que je trouverais quand même quelqu'un pour m'éclairer.
    Après avoir utilisé la commande nohup et fermé la session ssh, si on se reconnecte à la VM, est il possible de vérifier si le processus tourne toujours ?

    Merci d'avance

    kevho1 , le 23 juillet 2020 à 19:19
  •  

    @kevho1 : Pour voir ce qui tourne, il faut utiliser la commande "top"
    Si tu recherche un programme en particulier :
    top | grep "nom_du_programme"

    arnodu59 , le 25 novembre 2020 à 22:19

actualité android apache apple astuce astuces bash bilboblog blog boot chrome clavier commande commandes conky date debian Desktop développement elementary exploit faille fedora firefox flash gimp gnome google graphique Graphisme hack hacking Hardware humour intel internet iphone jailbreak Jeux Kde kernel libre Linux log logiciels Logiciels Libres lucid lynx maemo mail maquette metasploit microsoft mobile mockup monitoring mozilla multi-touch musique mysql n900 nautilus nokia noyau openoffice open source password photos php Planet publicité redhat red hat rpm réseau screenshot script serveur serveurs shell sql ssh statistiques sysadmin system Sécurité thème tux-planet tv twitter ubuntu unity vidéo vidéos vlc voyage wallpaper windows wordpress yum