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 Eingabe / Ausgabe entfernt, technisch gesehen die (Pseudo-) Ausgabe, auf der sie war. Es ist sehr unwahrscheinlich, dass Sie dies gemeint haben. Nehmen wir also an, Sie sprechen über eine X-App.
nohup
sollte funktionieren, nicht sicher, warum es nicht ist. Wenn die Shell geschlossen wird, sendet sie SIGHUP
an alle Prozesse in ihrer Prozessgruppe. nohup weist den Befehl an, SIGHUP zu ignorieren.
Sie können auch setsid ausprobieren, wodurch der Prozess von der Prozessgruppe getrennt wird
alias emacs='setsid emacs'
Oder fügen Sie disown
nach&
Die zuverlässigste Methode scheint zu sein:
Dies wird verwendet,
( &)
um in den Hintergrundsetsid
zu wechseln und sich von der Steuerung zu lösen.Sie können dies in eine Shell-Funktion einfügen:
Die Möglichkeiten sind:
Der
disown
eingebaute Befehl:&
Dient als Befehlstrennzeichen und verwendetdisown
standardmäßig den neuesten Job. Dies kann folgendermaßen verkürzt werden:Doppel-
fork()
:Befehle in Klammern
(
)
werden in einem separaten Shell-Prozess ausgeführt.setsid
Wie von Rich vorgeschlagen, ist dies möglicherweise die beste Wahl, da hierdurch das steuernde TTY des Prozesses durch Erstellen einer neuen Sitzung deaktiviert wird :Es ist jedoch auch ein wenig unvorhersehbar - es tritt nur
fork()
im Hintergrund auf, wenn es der Leiter einer Prozessgruppe ist (was nicht der Fallsetsid
ist , wenn es zum Beispiel in einemsh
Skript verwendet wird; in solchen Fällen wird es lediglich resistent gegen Strg- C.)quelle
(exec emacs)
funktionieren?(emacs)
. Wenn die Subshell einen einzelnen Befehl erhält,exec
wird der impliziert, zumindest im Fall vonbash
. Gleiches gilt fürbash -c 'foo'
versusbash -c 'exec foo'
. (Beachten Sie jedoch, dass Emacs selbst vom Terminal abgenommen werden kann;.. Gvim zum Beispiel das tut Es ist besser, Test mit einem Programm mit bekannten Verhalten)Überprüfen Sie die Shell-Einstellungen. Sie können auch versuchen, Bildschirm anstelle von
nohup
.quelle
screen -r
wenn Sie die VerbindungCtrl-A Ctrl-D
trennen, bevor Sie sich abmelden.screen -d -m sh -c "{do stuff } exit"
ist viel sinnvoller.