Antes de tudo, toda vez que você executa um comando, o shell faz um novo processo, independentemente de você executá-lo &
ou não. &
significa apenas que você está executando em segundo plano.
Observe que isso não é muito preciso. Alguns comandos, como cd
são funções de shell e geralmente não bifurcam um novo processo. type cmd
normalmente diz se cmd
é um comando externo ou uma função shell. type type
diz que em type
si é uma função shell.
nohup
é algo diferente. Diz ao novo processo para ignorar SIGHUP
. É o sinal enviado pelo kernel quando o shell principal é fechado.
Para responder sua pergunta, faça o seguinte:
- executar
emacs &
(por padrão, deve ser executado em uma janela X separada) .
- no shell pai, execute
exit
.
Você notará que a emacs
janela está morta, apesar de ser executada em segundo plano. Esse é o comportamento padrão e nohup
é usado com precisão para modificá-lo.
Executar um trabalho em segundo plano (com &
ou bg
, aposto que outros shells também têm outras sintaxes) é um recurso de shell, decorrente da capacidade dos sistemas modernos de realizar multitarefas. Em vez de bifurcação uma nova instância de shell para cada programa que você deseja iniciar, conchas modernas ( bash
, zsh
, ksh
, ...) terá a capacidade de gerenciar uma lista de programas (ou empregos ). Apenas um deles por vez pode estar em primeiro plano , o que significa que ele obtém o foco do shell. Eu gostaria que alguém pudesse expandir mais as diferenças entre um processo em execução em primeiro plano e outro em segundo plano (o principal é o acesso a stdin
/ stdout
).
De qualquer forma, isso não afeta a maneira como o processo filho reage SIGHUP
. nohup
faz.
nohup
faz. Que parte você confundiu?