Die zuverlässigste Methode scheint zu sein:
(setsid emacs &)
Dies verwendet ( &)
in den Hintergrund verzweigen und setsid
vom steuernden tty trennen.
Sie können dies in eine Shell-Funktion einfügen:
fork() { (setsid "[email protected]" &); }
fork emacs
Die Möglichkeiten sind:
-
Die
disown
eingebauter Befehl:emacs & disown $!
&
fungiert als Befehlstrenner unddisown
verwendet standardmäßig den neuesten Job, daher kann dies verkürzt werden zu:emacs & disown
-
Double-
fork()
:(emacs &)
Befehle in Klammern
(
)
werden in einem separaten Shell-Prozess ausgeführt. -
setsid
, wie von Rich vorgeschlagen, könnte die beste Wahl sein, da es das steuernde TTY des Prozesses durch Erstellen einer neuen Sitzung deaktiviert:setsid emacs
Allerdings ist es auch etwas unvorhersehbar - es wird nur
fork()
in den Hintergrund, wenn er der Anführer einer Prozessgruppe ist (was nicht passiert, wennsetsid
wird in einemsh
verwendet Skript zum Beispiel; in solchen Fällen wird es lediglich resistent gegen Strg-C.)
Sie erwähnen nicht, ob dies als X-App oder als Konsolen-App ausgeführt wird.
Wenn es sich um eine Konsolen-App handelt, muss sie natürlich geschlossen werden. Sie haben die Ein- / Ausgabe entfernt, genauer gesagt das (Pseudo-) tty, auf dem es sich befand. Es ist sehr unwahrscheinlich, dass Sie das gemeint haben, also nehmen wir an, Sie sprechen von einer X-App.
nohup
sollte funktionieren, keine Ahnung warum nicht. Wenn die Shell schließt, sendet sie SIGHUP
auf alle Prozesse in seiner Prozessgruppe. nohup weist den Befehl an, SIGHUP zu ignorieren.
Sie können auch setsid ausprobieren, das den Prozess von der Prozessgruppe trennt
alias emacs='setsid emacs'
Oder fügen Sie disown
hinzu nach &
Überprüfen Sie Ihre Shell-Einstellungen. Sie können es auch mit screen statt nohup
versuchen .