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 "[email protected]" &); }
fork emacs
Le possibilità sono:
-
Il
disown
comando integrato:emacs & disown $!
&
funge da separatore di comandi edisown
per 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 emacs
Tuttavia, è anche un po' imprevedibile:sarà solo
fork()
allo sfondo se è il leader di un gruppo di processi (cosa che non accadrà sesetsid
è usato in unsh
sceneggiatura, 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
.