Você não menciona se isso está sendo executado como um aplicativo X ou um aplicativo de console.
Se for um aplicativo de console, é claro que ele precisa ser fechado. Você se livrou de sua entrada / saída, mais tecnicamente o (pseudo) tty em que estava. É muito improvável que tenha sido isso que você quis dizer, então vamos supor que você esteja falando de um aplicativo X.
nohup
deve funcionar, não sei por que não é. Quando o shell é fechado, ele é enviado SIGHUP
para todos os processos em seu grupo de processos. nohup diz ao comando para ignorar SIGHUP.
Você também pode tentar setsid, que desconecta o processo do grupo de processos
alias emacs='setsid emacs'
Ou adicione disown
depois&
O método mais confiável parece ser:
Isso usa
( &)
para bifurcar em segundo plano esetsid
desanexar do controle tty.Você pode colocar isso em uma função shell:
As possibilidades são:
O
disown
comando embutido:&
atua como separador de comandos edisown
será padronizado para o trabalho mais recente, portanto, isso pode ser reduzido para:Duplo-
fork()
:Os comandos entre parênteses
(
)
são executados em um processo de shell separado.setsid
, conforme sugerido por Rich, pode ser a melhor opção, porque desativa o TTY de controle do processo criando uma nova sessão :No entanto, também é um pouco imprevisível - será apenas um
fork()
pano de fundo se for o líder de um grupo de processos (o que não acontecerá sesetsid
for usado em umsh
script, por exemplo; em tais ocasiões, apenas se tornará resistente ao Ctrl- C.)fonte
(exec emacs)
funcionaria?(emacs)
. Se o subshell receber um único comando, issoexec
estará implícito, pelo menos no caso debash
. O mesmo se aplica abash -c 'foo'
versusbash -c 'exec foo'
. (No entanto, nota que emacs em si podem ser destacados do terminal;.. Gvim, por exemplo, faz isso É melhor teste com um programa com o comportamento conhecido)Verifique suas configurações de shell. Você também pode tentar a tela em vez de
nohup
.fonte
screen -r
o usoCtrl-A Ctrl-D
de desconectá-lo antes de sair.screen -d -m sh -c "{do stuff } exit"
faz muito mais sentido.