Nejspolehlivější metodou se zdá být:
(setsid emacs &)
Toto používá ( &)
k rozvětvení na pozadí a setsid
k odpojení od ovládacího tty.
Můžete to vložit do funkce shellu:
fork() { (setsid "[email protected]" &); }
fork emacs
Možnosti jsou:
-
disown
vestavěný příkaz:emacs & disown $!
&
funguje jako oddělovač příkazů adisown
bude výchozí na nejnovější úlohu, takže to lze zkrátit na:emacs & disown
-
Double-
fork()
:(emacs &)
Příkazy v závorkách
(
)
jsou spuštěny v samostatném procesu shellu. -
setsid
, jak navrhuje Rich, může být tou nejlepší volbou, protože zruší nastavení řídicího TTY procesu vytvořením nové relace:setsid emacs
Je to však také trochu nepředvídatelné - bude to pouze
fork()
na pozadí, pokud je vedoucím skupiny procesů (což se nestane, pokudsetsid
se používá vsh
skript, například; v takových případech se pouze stane odolným vůči Ctrl-C.)
Neuvádíte, zda to běží jako X aplikace nebo konzolová aplikace.
Pokud je to jako konzolová aplikace, musí se samozřejmě zavřít. Zbavili jste se jeho vstupu/výstupu, technickyji řečeno (pseudo)tty, na kterém byl zapnutý. Je velmi nepravděpodobné, že jste to mysleli, takže předpokládejme, že mluvíte o aplikaci X.
nohup
by mělo fungovat, nevím proč ne. Když se shell zavře, odešle SIGHUP
všem procesům ve své skupině procesů. nohup říká příkazu, aby ignoroval SIGHUP.
Můžete také zkusit setsid, které odpojí proces od skupiny procesů
alias emacs='setsid emacs'
Nebo přidejte disown
po &
Zkontrolujte nastavení shellu. Místo nohup
můžete také zkusit screen .