Le nohup
La commande exécute un autre programme spécifié comme argument et ignore tous les SIGHUP
(raccrocher). SIGHUP
est un signal envoyé à un processus lorsque son terminal de contrôle est fermé.
Habituellement, lorsque vous exécutez un programme via SSH, si votre connexion est interrompue ou si vous vous déconnectez, la session est terminée et tous les processus exécutés à partir du terminal s'arrêtent. C'est là que le nohup
la commande est pratique. Il ignore tous les signaux de raccrochage et le processus continuera à s'exécuter.
Comment utiliser la commande nohup #
La syntaxe du nohup
commande est la suivante :
nohup COMMAND [ARGS]
La commande n'accepte aucune autre option à l'exception du standard --help
et --version
.
Prenons l'exemple suivant :
nohup mycommand
nohup: ignoring input and appending output to 'nohup.out'
nohup
exécute la mycommand
commande au premier plan et redirige la sortie de la commande vers le nohup.out
dossier. Ce fichier est créé dans le répertoire de travail courant. Si l'utilisateur qui exécute la commande ne dispose pas d'autorisations d'écriture sur le répertoire de travail, le fichier est créé dans le répertoire personnel de l'utilisateur.
Si vous vous déconnectez ou fermez le terminal, le processus n'est pas terminé.
Exécuter la commande en arrière-plan #
Utiliser nohup
au premier plan n'est pas très utile car vous ne pourrez pas interagir avec le shell tant que la commande n'est pas terminée.
Pour exécuter la commande en arrière-plan, ajoutez le &
symbole à la fin de la commande :
nohup mycommand &
La sortie inclut l'ID de tâche shell (entouré de crochets) et l'ID de processus :
[1] 25177
Vous pouvez utiliser l'ID de travail pour mettre la commande au premier plan en utilisant le fg
commande.
Si pour une raison quelconque vous souhaitez mettre fin au processus, utilisez le kill
commandesuivi de l'identifiant du processus :
kill -9 25132
Redirection de la sortie vers un fichier #
Par défaut, nohup
redirige la sortie de la commande vers le nohup.out
dossier. Si vous souhaitez rediriger la sortie vers un autre fichier, utilisez la redirection standard du shell.
Par exemple, pour rediriger la sortie standard et l'erreur standard vers mycommand.out
vous utiliseriez :
nohup mycommand > mycommand.out 2>&1 &
Pour rediriger la sortie standard et l'erreur standard vers des fichiers différents :
nohup mycommand > mycommand.out 2> mycommand.err &
Alternatives #
Il existe plusieurs programmes alternatifs que vous pouvez utiliser pour éviter qu'une commande ne se termine lorsque vous fermez le terminal ou que vous êtes déconnecté.
Numéro d'écran
Screenor GNU Screen est un programme multiplexeur de terminaux qui vous permet de démarrer une session screen et d'ouvrir un nombre quelconque de fenêtres (terminaux virtuels) à l'intérieur de cette session. Les processus en cours d'exécution dans Screen continueront de s'exécuter lorsque leur fenêtre n'est pas visible, même si vous êtes déconnecté.
Tmux #
Tmux est une alternative moderne à l'écran GNU. Avec Tmux, vous pouvez également créer une session et ouvrir plusieurs fenêtres à l'intérieur de cette session. Les sessions Tmux sont persistantes, ce qui signifie que les programmes exécutés dans Tmux continueront à s'exécuter même si vous fermez le terminal.
Désavouer #
disown
est une commande interne du shell qui supprime une tâche du shell du contrôle de tâche du shell. Contrairement à nohup
, vous pouvez utiliser disown
également sur les processus en cours d'exécution.
Conclusion #
nohup
vous permet d'empêcher l'arrêt des commandes lorsque vous vous déconnectez ou quittez le terminal.
Si vous avez des questions ou des commentaires, n'hésitez pas à laisser un commentaire.