Odpowiedzi:
Nie wspominasz, czy działa jako aplikacja X czy konsola.
Jeśli jest to aplikacja konsolowa, oczywiście musi zostać zamknięta. Pozbyłeś się jego wejścia / wyjścia, a bardziej technicznie (pseudo) tty, na którym był włączony. Bardzo mało prawdopodobne jest to, co miałeś na myśli, więc załóżmy, że mówisz o aplikacji X.
nohup
powinien działać, nie jestem pewien, dlaczego tak nie jest. Gdy powłoka zostanie zamknięta, wysyła ją SIGHUP
do wszystkich procesów w swojej grupie procesów. nohup nakazuje zignorować SIGHUP.
Możesz także wypróbować setsid, który odłączy proces od grupy procesów
alias emacs='setsid emacs'
Lub dodaj disown
po&
Najbardziej niezawodną metodą wydaje się być:
(setsid emacs &)
Służy to ( &)
do przechodzenia do tła i setsid
odłączania się od kontrolującego tty.
Możesz umieścić to w funkcji powłoki:
fork() { (setsid "$@" &); }
fork emacs
Możliwości są następujące:
disown
Wbudowanego polecenia:
emacs &
disown $!
&
działa jako separator poleceń i disown
domyślnie przyjmuje ostatnie zadanie, więc można je skrócić do:
emacs & disown
Double- fork()
:
(emacs &)
Polecenia w nawiasach (
)
są uruchamiane w osobnym procesie powłoki.
setsid
, zgodnie z sugestią Richa, może być najlepszym wyborem, ponieważ resetuje kontrolującą TTY procesu, tworząc nową sesję :
setsid emacs
Jest to jednak trochę nieprzewidywalne - będzie działało tylko fork()
w tle, jeśli będzie liderem grupy procesów (co nie stanie się, jeśli setsid
zostanie użyte sh
na przykład w skrypcie; w takich przypadkach będzie jedynie odporne na Ctrl- DO.)
(exec emacs)
działałoby?
(emacs)
. Jeśli podpowłoka otrzyma jedno polecenie, exec
implikowane jest to, przynajmniej w przypadku bash
. To samo dotyczy bash -c 'foo'
versus bash -c 'exec foo'
. (Jednakże należy zauważyć, że Emacs sama może być oderwanie od terminala,.. Gvim, na przykład, czy to jest lepiej testu z programu z znany zachowania)
Sprawdź ustawienia powłoki. Możesz także wypróbować screen zamiast nohup
.
screen -r
jeśli użyjesz go Ctrl-A Ctrl-D
do odłączenia przed wylogowaniem.
screen -d -m sh -c "{do stuff } exit"
ma to o wiele większy sens.