Voici ce que je comprends de l'utilisation de &
, disown
et Nohup
:
<command>
: exécute le processus dans l'instance bash
actuelle du terminal, au premier plan (le processus est répertorié comme travail bash
au premier plan et stdin
, stdout
et stderr
sont toujours lié au terminal ); non immunisé contre les blocages ;<command> &
: exécute le processus dans l'instance actuelle du terminal bash
du terminal, en arrière-plan (le processus est répertorié en tant que tâche d'arrière-plan bash
et que stdin
, stdout
et stderr
sont toujours lié au terminal ); non immunisé contre les blocages ;<command> & disown
: exécute le processus dans l'instance actuelle bash
du terminal, en arrière-plan , mais le processus est détaché de la liste des travaux de bash
(c’est-à-dire que le processus ne figure pas dans la liste des tâches bash
au premier plan/à l’arrière-plan et que les variables stdin
, stdout
et stderr
sont toujours liées au terminal ); immunisé contre les blocages ;Nohup <command> & disown
: exécute le processus dans l'instance actuelle bash
du terminal, en arrière-plan , mais le processus est détaché de la liste des travaux de bash
(c’est-à-dire que le processus ne figure pas dans la liste des tâches bash
au premier plan/en arrière-plan et que stdin
, stdout
et stderr
sont non toujours liés au terminal ); immunisé contre les blocages ;Donc, mis à part le Nohup <command> & disown
qui bloque stdin
et redirige stdout
et stderr
vers Nohup.out
par défaut, il me semble que cela peut être considéré comme totalement équivalent à <command> & disown
.
Le dessus est-il correct? Une idée fausse?
Votre compréhension est fondamentalement correcte. disown
et Nohup
permettent de quitter une session Shell en cours d'exécution sans arrêter les travaux en cours. Quelques clarifications:
Il n'y a aucune raison d'exécuter Nohup command & disown
, Nohup
le désavouera déjà pour vous.
Nohup
est défini par POSIX tandis que disown
n'est pas . Cela signifie que si de nombreux shells (par exemple, bash
, zsh
, ksh
) le possèdent, d’autres (par exemple, tcsh
, csh
, dash
et sh
) ne l’auront pas.
disown
peut être utilisé après une commande a été lancée alors que Nohup
doit être utilisé auparavant.
Autant que je sache, l'effet réel des deux commandes est le même. Ils ont chacun des fonctionnalités qui manquent à l’autre (voir help disown
et man Nohup
) mais leur fonction de base est la même, oui.
Pour une discussion beaucoup plus détaillée de ces outils et de leurs différences, regardez les réponses ici:
Votre premier au troisième point semble correct, bien que stdin, stdout and stderr are still bound to the terminal
ne soit pas une bonne notion. stdin
est toujours lié au terminal en ce sens que vous saisissez toujours le nom du fichier dans une commande via un terminal ou par des moyens utilisant terminal. stdout and stderr are still bound to the terminal
va bien.
Vous avez stdin, stdout and stderr are not still bound to the terminal
dans le quatrième point qui n’est pas correct comme mentionné dans mon paragraphe précédent. Ici aussi, vous utilisez /dev/null
en tant que fichier d'entrée de command
, par exemple, si la commande est cat
, vous l'utilisez en tant que cat /dev/null
.
La commande sur votre 5ème point n'est pas correctement placée, vous avez utilisé Nohup <command> & disown
, alors que vous utilisez l'un des Nohup
ou disown
l'autre n'est pas nécessaire. Leurs buts sont les mêmes (ignorer le SIGHUP
) mais ils fonctionnent de manière légèrement différente. Donc, la commande peut être simplifiée en tant que Nohup <command> &
.