Vous ne mentionnez pas si cela fonctionne comme une application X ou une application console.
S'il s'agit d'une application console, elle doit bien sûr être fermée. Vous vous êtes débarrassé de ses entrées / sorties, plus techniquement du (pseudo) tty sur lequel il était. Il est très peu probable que ce soit ce que vous vouliez dire, supposons donc que vous parlez d'une application X.
nohup
devrait fonctionner, je ne sais pas pourquoi ce n'est pas le cas. Lorsque le shell se ferme, il envoie SIGHUP
à tous les processus de son groupe de processus. nohup indique à la commande d'ignorer SIGHUP.
Vous pouvez également essayer setsid, qui déconnecte le processus du groupe de processus
alias emacs='setsid emacs'
Ou ajoutez disown
après&
La méthode la plus fiable semble être:
Cela permet
( &)
de bifurquer vers l'arrière-plan etsetsid
de se détacher du terminal de contrôle.Vous pouvez mettre cela dans une fonction shell:
Les possibilités sont:
La
disown
commande intégrée:&
agit comme séparateur de commandes etdisown
sera par défaut le travail le plus récent, donc cela peut être raccourci à:Double-
fork()
:Les commandes entre parenthèses
(
)
sont exécutées dans un processus shell distinct.setsid
, comme suggéré par Rich, pourrait être le meilleur choix, car il désactive le contrôle ATS du processus en créant une nouvelle session :Cependant, il est également un peu imprévisible - il ne sera mis
fork()
en arrière-plan que s'il est le leader d'un groupe de processus (ce qui ne se produira pas s'ilsetsid
est utilisé dans unsh
script, par exemple; dans de telles occasions, il deviendra simplement résistant à Ctrl- C.)la source
(exec emacs)
marcherait?(emacs)
. Si le sous-shell reçoit une seule commande, leexec
est implicite, au moins en cas debash
. La même chose s'applique àbash -c 'foo'
versusbash -c 'exec foo'
. (Cependant, notez qu'emacs lui - même peut se détacher du terminal; gvim, par exemple, le fait. Il vaut mieux tester avec un programme avec un comportement connu.)Vérifiez vos paramètres de shell. Vous pouvez également essayer l' écran au lieu de
nohup
.la source
screen -r
si vous l'utilisezCtrl-A Ctrl-D
pour le déconnecter avant de vous déconnecter.screen -d -m sh -c "{do stuff } exit"
c'est beaucoup plus logique.