Este é o meu entendimento sobre o uso &
, disown
e nohup
:
<command>
: É executado o processo dentro de corrente do terminalbash
exemplo, no primeiro plano (isto é, o processo está listado como umabash
tarefa de primeiro plano estdin
,stdout
estderr
ainda estão ligados ao terminal ); não imune a puxões ;<command> &
: É executado o processo dentro de corrente do terminalbash
exemplo, no fundo (ou seja, o processo está listada como umbash
trabalho de fundo estdin
,stdout
estderr
ainda estão ligados ao terminal ); não imune a puxões ;<command> & disown
: É executado o processo dentro de corrente do terminalbash
exemplo, no fundo , mas o processo é separada dasbash
lista 's trabalhos' (isto é, o processo não está listado como umabash
tarefa de primeiro plano / segundo plano estdin
,stdout
estderr
ainda estão ligados ao terminal ); imune a interrupções ;nohup <command> & disown
: É executado o processo dentro de corrente do terminalbash
exemplo, no fundo , mas o processo é separada dasbash
lista 's trabalhos' (isto é, o processo não está listado como umabash
tarefa de primeiro plano / segundo plano estdin
,stdout
estderr
são não ainda ligado ao terminal ) ; imune a interrupções ;
Assim, além de nohup <command> & disown
bloquear stdin
e redirecionar stdout
e stderr
para nohup.out
por padrão, parece-me que ele pode ser considerado totalmente equivalente a <command> & disown
.
O acima está correto? Algum equívoco?
bash
exemplo não irá matar o processoRespostas:
Sua compreensão é basicamente correta. Ambos
disown
enohup
são usados para permitir que você saia de uma sessão shell em execução sem interromper os trabalhos em execução. Alguns esclarecimentos:Não há razão para correr
nohup command & disown
,nohup
já o negará.nohup
é definido pelo POSIX enquantodisown
não é . Isto significa que enquanto muitas conchas (por exemplobash
,zsh
,ksh
) tê-lo, outros (por exemplotcsh
,csh
,dash
esh
) não vai tê-lo.disown
pode ser usado depois que um comando foi iniciado enohup
deve ser usado antes.Até onde eu sei, o efeito real dos dois comandos é o mesmo. Cada um deles possui características que o outro não possui (veja
help disown
eman nohup
), mas sua função básica é a mesma, sim.Para uma discussão muito mais detalhada sobre essas ferramentas e as diferenças entre elas, consulte as respostas aqui:
disown -h
enohup
trabalhe efetivamente da mesma forma?fonte
Nohup
edisown
não são a mesma coisa e usar os dois comandos juntos NÃO é redundante. Veja esta resposta para uma descrição detalhadaSeus primeiro a terceiro pontos parecem bons, embora
stdin, stdout and stderr are still bound to the terminal
não seja uma noção correta.stdin
está sempre vinculado ao terminal no sentido em que você sempre inseria o nome do arquivo em um comando via terminal ou através do terminal.stdout and stderr are still bound to the terminal
está tudo bemVocê tem
stdin, stdout and stderr are not still bound to the terminal
no quarto ponto que não está certo, como mencionado no meu parágrafo anterior. Também aqui você está usando/dev/null
como arquivo de entrada paracommand
, por exemplo, se o comando estivercat
, você está usando-o comocat /dev/null
.O comando no seu quinto ponto não foi colocado corretamente, você usou
nohup <command> & disown
, enquanto o uso de umnohup
oudisown
outro não é necessário. Seus propósitos são os mesmos (ignorar oSIGHUP
), mas funcionam de maneira um pouco diferente. Portanto, o comando pode ser simplificado comonohup <command> &
.fonte