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ć:
Służy to
( &)
do przechodzenia do tła isetsid
odłączania się od kontrolującego tty.Możesz umieścić to w funkcji powłoki:
Możliwości są następujące:
disown
Wbudowanego polecenia:&
działa jako separator poleceń idisown
domyślnie przyjmuje ostatnie zadanie, więc można je skrócić do:Double-
fork()
: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ę :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ślisetsid
zostanie użytesh
na przykład w skrypcie; w takich przypadkach będzie jedynie odporne na Ctrl- DO.)źródło
(exec emacs)
działałoby?(emacs)
. Jeśli podpowłoka otrzyma jedno polecenie,exec
implikowane jest to, przynajmniej w przypadkubash
. To samo dotyczybash -c 'foo'
versusbash -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
.źródło
screen -r
jeśli użyjesz goCtrl-A Ctrl-D
do odłączenia przed wylogowaniem.screen -d -m sh -c "{do stuff } exit"
ma to o wiele większy sens.