Em primeiro lugar, toda vez que você executar um comando, o shell aplicará um novo processo, independentemente de você executá-lo com &
ou não. &
significa que você está executando em segundo plano.
Note que isto não é muito preciso. Alguns comandos, como cd
, são funções do shell e geralmente não bifurcam um novo processo. type cmd
geralmente informa se cmd
é um comando externo ou uma função shell. type type
informa que type
é uma função de shell.
nohup
é algo diferente. Diz ao novo processo para ignorar SIGHUP
. É o sinal enviado pelo kernel quando o shell pai é fechado.
Para responder à sua pergunta, faça o seguinte:
- execute
emacs &
(por padrão, deve ser executado em uma janela X separada) . - no shell pai, execute
exit
.
Você notará que a janela emacs
está morta, apesar de ser executada em segundo plano. Esse é o comportamento padrão e nohup
é usado precisamente para modificar isso.
A execução de um job em segundo plano (com &
ou bg
, aposto que outros shells também possuem outras sintaxes) é um recurso de shell, originado da capacidade dos sistemas modernos de realizar multitarefas. Em vez de bifurcar uma nova instância de shell para cada programa que você deseja iniciar, os shells modernos ( bash
, zsh
, ksh
, ...) terão a capacidade de gerenciar uma lista de programas (ou jobs ). Apenas um deles por vez pode estar no primeiro plano , o que significa que ele recebe o foco do shell. Eu gostaria que alguém pudesse se expandir mais sobre as diferenças entre um processo rodando em primeiro plano e um em segundo plano (o principal acessando stdin
/ stdout
).
Em qualquer caso, isso não afeta a maneira como o processo filho reage a SIGHUP
. nohup
faz.