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 estava ligado. É muito improvável que seja isso que você quis dizer, então vamos supor que você esteja falando sobre um aplicativo X.
nohup
deve funcionar, não sei porque não é. Quando o shell é fechado, ele envia SIGHUP
para todos os processos em seu grupo de processos. nohup diz ao comando para ignorar o SIGHUP.
Você também pode experimentar o setsid, que desconecta o processo do grupo de processos
alias emacs='setsid emacs'
Ou adicione disown
após &