Il metodo più affidabile sembra essere:
(setsid emacs &)
Questo utilizza ( &) per passare allo sfondo e setsid per staccarsi dal tty di controllo.
Puoi inserirlo in una funzione di shell:
fork() { (setsid "example@unixlinux.online" &); }
fork emacs
Le possibilità sono:
-
Il
disowncomando integrato:emacs & disown $!&funge da separatore di comandi edisownper impostazione predefinita sarà il lavoro più recente, quindi può essere abbreviato in:emacs & disown -
Doppio-
fork():(emacs &)Comandi tra parentesi
()vengono eseguiti in un processo shell separato. -
setsid, come suggerito da Rich, potrebbe essere la scelta migliore, perché disattiva il TTY di controllo del processo creando una nuova sessione:setsid emacsTuttavia, è anche un po' imprevedibile:sarà solo
fork()allo sfondo se è il leader di un gruppo di processi (cosa che non accadrà sesetsidè usato in unshsceneggiatura, per esempio; in tali occasioni diventerà semplicemente resistente a Ctrl-C.)
Non specifichi se è in esecuzione come app X o app console.
Se è un'app per console, ovviamente deve essere chiusa. Ti sei sbarazzato del suo input/output, più tecnicamente lo (pseudo) tty su cui si trovava. È molto improbabile che tu intendessi questo, quindi supponiamo che tu stia parlando di un'app X.
nohup dovrebbe funzionare, non so perché non lo sia. Quando la shell si chiude, invia SIGHUP a tutti i processi nel relativo gruppo di processi. nohup dice al comando di ignorare SIGHUP.
Puoi anche provare setsid, che disconnette il processo dal gruppo di processi
alias emacs='setsid emacs'
Oppure aggiungi disown dopo &
Controlla le impostazioni della shell. Puoi anche provare screen invece di nohup .