Quando você faz:
nohup echo "45" > my_named_pipe &
O shell se bifurca. Na criança, abre my_named_pipe
para escrever. Esse open()
bloqueia até que algo mais abra my_named_pipe
para leitura.
Quando você executa exit
no processo pai, o filho ainda está bloqueado no open()
e ainda não executou nohup
.
Assim, ao sair do shell, o shell envia SIGHUP para o filho, que ele não ignora, pois ele ainda não executou nohup
.
Basta executar:
(echo 45 > my_named_pipe &)
Ou com zsh
:
echo 45 > my_named_pipe &!
&!
é o açúcar sintático zsh para disown
Both BASH and ZSH have a nice builtin called disown. It enables user to detach process from the shell in a way much similar to that of nohup. ZSH has a nice sugar for it: you can put &! at the end of the command, and it would be detached. BASH doesn’t have such sugar
http://blog.debiania.in.ua/posts/2013-03-13-fun-with-bash-disown.html