O que significa o símbolo "comercial" (&) com `nohup`?

11

Eu já vi vários exemplos em que a &segue o final de uma sequência de comandos, mas não consigo encontrar uma explicação sobre o que ela faz. Não é mesmo em nohup's manpágina. Isso é uma coisa de concha?

Usando &ou não, acho que qualquer processo executado nohupparece exibir imunidade a qualquer sinal de interrupção.

Chad Harrison
fonte
1
"Acho que qualquer processo executado com nohup parece exibir imunidade a qualquer sinal de interrupção". É para isso que serve o nohup.
Samuel Edwin Ward
Ok, então deixe-me esclarecer: os únicos exemplos que eu já vi usam o &, então eu não tinha certeza se &havia algum tipo de modificador ou argumento que fez o nohupcomportamento ser diferente.
Chad Harrison
1
Isso é uma coisa razoável de se suspeitar. De fato, ele não modifica o comportamento nohup (o nohup nem consegue vê-lo), mas modifica o comportamento do shell.
Samuel Edwin Ward
nohup & -> No Hangup e coloque-o em segundo plano. Desde os bons velhos tempos de modems e terminais seriais. Quando meu terminal e modem ficarem offline, continue processando isso em segundo plano, para que o trabalho seja feito na próxima vez em que ficar on-line.
Fiasco Labs

Respostas:

19

Na página de manual do bash :

Se um comando é finalizado pelo operador de controle &, o shell executa o comando em segundo plano em uma subshell. O shell não espera o comando terminar e o status de retorno é 0.

Então, sim, é uma coisa de shell e pode ser usado com qualquer comando. Essencialmente, ele retorna o controle para você imediatamente e permite que o comando seja concluído em segundo plano. Isso quase sempre é usado nohupporque você normalmente deseja sair do shell após iniciar o comando.

mgorven
fonte
4
Eu vi você postar um monte de boas respostas recentemente e meu cérebro sempre traduz seu nome de usuário para McGuyver. Não sei por que sinto a necessidade de lhe dizer isso.
MDMarra
1
@MDMarra Vou aceitar isso como um elogio ;-) #
mgorven 26/06/2012
1
@MDMarra Pelo menos você não pensa: "McGruber"
Ward - Reinstate Monica
7

O uso do e comercial (&) executará o comando em um processo filho (filho na sessão atual do bash). No entanto, quando você sai da sessão, todos os processos filhos serão eliminados.

o uso de nohup + e comercial (&) fará a mesma coisa, exceto quando a sessão terminar, o pai do processo filho será alterado para "1", que é o processo "init", impedindo que o filho seja morto.

Michel
fonte
3

Sim, é uma coisa do shell - ele executa o comando em segundo plano para que você não precise esperar o comando atual retornar antes de emitir mais comandos.

roubar
fonte