De man nohup
:
Si l'entrée standard est un terminal, redirigez-le depuis / dev / null. Si la sortie standard est un terminal, ajoutez la sortie nohup.out
si possible, $HOME/nohup.out
sinon. Si l'erreur standard est un terminal, redirigez-le vers la sortie standard. Pour enregistrer la sortie dans FILE, utilisez nohup COMMAND > FILE
.
(entièrement révisé en fonction des commentaires)
Lors de la fermeture d'un shell ou de la fermeture d'un terminal, les processus enfants seront envoyés SIGHUP (raccrochage, le nom provient du moment où les terminaux se connecteraient à l'ordinateur UNIX) pour leur dire que le terminal n'est pas plus connecté. De plus, à la fin du processus shell, les flux stdin, stdout et stderr du processus enfant seront fermés. Cela entraîne généralement la mort du processus enfant. Habituellement, c'est une bonne chose car cela évite de laisser les processus s'exécuter sans utilisateur.
Le but du nohup
programme est de maintenir le processus en marche même après la fin du shell et la déconnexion du terminal. En tant que tel, diriger sa sortie vers le terminal va complètement à l'encontre du but. Ma réponse d'origine ( nohup COMMAND | cat
) n'a pas été utile car: lorsque le terminal est fermé, la sortie de chat est fermée et donc chat meurt, ce qui rompt le tuyau et envoie un SIGPIPE au processus nohup le faisant mourir. J'avais répondu à la question sans penser à l'objectif.
Pour atteindre votre objectif, exécutez nohup COMMAND > FILE
pour sélectionner le nom du fichier vers lequel diriger la sortie. Ensuite, utilisez tail -f FILE
pour regarder la sortie sur un terminal.
De même, on pourrait utiliser la construction shell suivante: COMMAND >FILE 2>&1 </dev/null &
pour exécuter une commande dont les flux stdio ne sont pas connectés au terminal et peuvent continuer à fonctionner après la fermeture du terminal. De plus, dans zsh, exécutez le shell-builtin disown
pour dire à zsh de quitter le processus au lieu de le tuer à la fin du shell.