Ceci est ma compréhension de l'utilisation de &
, disown
et nohup
:
<command>
: exécute le processus au sein de l'bash
instance actuelle du terminal , au premier plan (c'est-à-dire que le processus est répertorié en tant quebash
tâche de premier plan etstdin
,stdout
etstderr
sont toujours liés au terminal ); pas à l'abri des blocages ;<command> &
: exécute le processus dans l’bash
instance actuelle du terminal , en arrière-plan (c’est-à-dire que le processus est répertorié commebash
travail en arrière - plan etstdin
,stdout
etstderr
sont toujours liés au terminal ); pas à l'abri des blocages ;<command> & disown
: exécute le processus au sein de l'bash
instance actuelle du terminal , en arrière-plan , mais le processus est détaché de labash
liste des 'travaux' (c'est-à-dire que le processus n'est pas répertorié en tant que travail d'bash
avant-plan / en arrière-plan etstdin
,stdout
etstderr
sont toujours liés au terminal ); à l'abri des blocages ;nohup <command> & disown
: Exécute le processus dans le courant de terminal parbash
exemple, en arrière - plan , mais le processus est détaché de labash
liste ' les emplois de (le processus ne figure pas comme unbash
travail de premier plan / arrière - plan etstdin
,stdout
etstderr
sont pas encore lié à la borne ) ; à l'abri des blocages ;
Ainsi, en dehors de nohup <command> & disown
bloquer stdin
et de rediriger stdout
et stderr
à nohup.out
par défaut, il me semble que cela peut être considéré comme tout à fait équivalent à <command> & disown
.
Le dessus est-il correct? Une idée fausse?
bash
instance parent ne tuera pas le processusRéponses:
Votre compréhension est fondamentalement correcte. Les deux
disown
etnohup
sont utilisés pour vous permettre de sortir d' une session shell en cours d' exécution sans arrêter tâches en cours. Quelques clarifications:Il n'y a aucune raison de courir
nohup command & disown
, lenohup
sera déjà désavoué pour vous.nohup
est défini par POSIX alors quedisown
non . Cela signifie que si beaucoup de coquilles (par exemplebash
,zsh
,ksh
) l' ont, d' autres (par exempletcsh
,csh
,dash
etsh
) ne l' auront pas.disown
peut être utilisé après qu'une commande a été lancée alors quenohup
doit être utilisé avant.Autant que je sache, l'effet réel des deux commandes est le même. Ils ont chacun des caractéristiques que l'autre manque (voir
help disown
etman 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:
disown -h
etnohup
travaille efficacement la même chose?la source
Nohup
etdisown
ne sont pas la même chose et l'utilisation simultanée des deux commandes n'est PAS redondante. Voir cette réponse pour une description détailléeVotre premier au troisième point semble correct, même si ce
stdin, stdout and stderr are still bound to the terminal
n’est pas une notion juste.stdin
est toujours lié au terminal en ce sens que vous devez toujours saisir 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
C'est bien.Vous avez
stdin, stdout and stderr are not still bound to the terminal
dans le quatrième point ce qui n’est pas juste comme mentionné dans mon paragraphe précédent. Vous utilisez également ici/dev/null
le fichier d’entréecommand
, par exemple, si la commande estcat
, vous l’utilisez en tant quecat /dev/null
.La commande sur votre 5ème point n'est pas correctement placée, vous avez utilisé
nohup <command> & disown
, alors que l'utilisation de l'unnohup
oudisown
l'autre n'est pas nécessaire. Leurs buts sont les mêmes (ignorer leSIGHUP
) mais ils fonctionnent de manière légèrement différente. Donc, la commande peut être simplifiée commenohup <command> &
.la source