Tout d'abord, à chaque fois que vous exécutez une commande, vous interprétez un shell avec un nouveau processus, que vous l'exécutiez &
ou non. &
signifie simplement que vous l'exécutez en arrière-plan.
Notez que ce n'est pas très précis. Certaines commandes, comme cd
les fonctions shell, ne génèrent généralement pas de nouveau processus. type cmd
vous indiquera généralement s'il cmd
s'agit d'une commande externe ou d'une fonction shell. type type
vous indique que type
lui - même est une fonction shell.
nohup
est quelque chose de différent. Il indique au nouveau processus d'ignorer SIGHUP
. Il s'agit du signal envoyé par le noyau lorsque le shell parent est fermé.
Pour répondre à votre question, procédez comme suit:
- exécuter
emacs &
(par défaut doit s'exécuter dans une fenêtre X distincte) .
- sur le shell parent, exécutez
exit
.
Vous remarquerez que la emacs
fenêtre est tuée, malgré l'exécution en arrière-plan. Il s'agit du comportement par défaut et nohup
est utilisé précisément pour le modifier.
L'exécution d'un travail en arrière-plan (avec &
ou bg
, je parie que d'autres shells ont également d'autres syntaxes) est une fonctionnalité de shell, issue de la capacité des systèmes modernes à effectuer plusieurs tâches. Au lieu de bifurquer une nouvelle instance de shell pour chaque programme que vous voulez lancer, shells modernes ( bash
, zsh
, ksh
, ...) aura la possibilité de gérer une liste de programmes (ou emplois ). Un seul d'entre eux à la fois peut être au premier plan , ce qui signifie qu'il obtient le focus shell. Je souhaite que quelqu'un puisse développer davantage les différences entre un processus exécuté au premier plan et un en arrière-plan (le principal étant l'accès à stdin
/ stdout
).
Dans tous les cas, cela n'affecte pas la façon dont le processus enfant réagit SIGHUP
. nohup
Est-ce que.
nohup
passe. Quelle partie avez-vous confondue?