Quitter zsh, mais laisser les emplois en cours d'exécution ouverts?

vient de passer de bash à zsh.

En bash, les tâches de fond continuer à fonctionner lorsque le shell sorties. Par exemple ici, dolphin continue de courir après le exit :

$ dolphin .
^Z
[1]+  Stopped                 dolphin .
$ bg
[1]+ dolphin . &
$ exit

C'est ce que je veux comme comportement par défaut.

en revanche, le comportement de zsh est de prévenir sur les travaux en cours sur exit , puis les fermer si vous exit à nouveau. Par exemple, ici, dolphin est fermé lorsque le deuxième exit - commande sort effectivement du shell:

 % dolphin .
^Z
zsh: suspended  dolphin .
 % bg
[1]  + continued  dolphin .
 % exit
zsh: you have running jobs.
 % exit 

comment rendre le comportement par défaut de zsh ici comme celui de bash?

54
demandé sur Anko 2013-10-10 21:59:53

4 réponses

démarrer le programme avec -

dolphin &!

le &! ( ou équivalent, &| ) est un raccourci spécifique de zsh à la fois background et disown le processus, de sorte que la sortie du shell le laissera en marche.

82
répondu Anko 2017-04-13 12:36:30

De la zsh documentation :

HUP

... En zsh, si vous avez une tâche de fond en cours d'exécution lorsque l'interpréteur de commandes sort, l'interpréteur de commandes supposera que vous voulez qu'il soit tué; dans ce cas, il est envoyé un signal particulier appelé SIGHUP ... Si vous commencez souvent des travaux qui devraient continuer même lorsque le shell est sorti, alors vous pouvez définir l'option NO_HUP , et les travaux de fond sera laissé seul.

il suffit donc de définir l'option NO_HUP :

% setopt NO_HUP
49
répondu Carl Norum 2013-10-10 18:04:28

j'ai trouvé que l'utilisation d'une combinaison de nohup , & , et disown fonctionne pour moi, car je ne veux pas faire fonctionner les travaux de façon permanente lorsque le shell a quitté.

nohup <command> & disown

alors que juste & a fonctionné pour moi dans bash , j'ai trouvé en utilisant seulement nohup , & , ou disown sur les commandes en cours d'exécution, comme un script qui appelle une commande java run, le processus s'arrêterait quand le shell serait sorti.

  • nohup fait ignorer la commande NOHUP et SIGHUP les signaux du shell
  • & fait tourner le processus en arrière-plan dans un subterminal
  • disown suivi d'un argument (l'index du numéro de tâche dans votre liste de tâches) empêche le shell d'envoyer un signal SIGHUP aux processus enfants. L'utilisation de disown sans argument lui fait défaut à la emploi le plus récent.

j'ai trouvé les nohup et disown informations à cette page , et les & informations à cette réponse .

19
répondu ryanjdillon 2017-05-23 11:47:29

j'utilise typiquement screen pour maintenir les travaux de fond en cours.

1) Créer une session d'écran:

screen -S myScreenName

2) Lancez vos scripts,services, démons ou quoi que ce soit

3) Écran de sortie (detach) - session avec

screen -d

ou raccourci ALT+A then d


Après quelques centaines d'années - si vous voulez reprendre votre session (rattacher):

screen -r myScreenName

si vous voulez savoir s'il y a une session-Écran, son nom et son statut (joint ou détaché):

screen -ls

Cette solution fonctionne sur tous les interprètes terminaux comme bash, zsh etc. Voir aussi man screen

1
répondu Aydin K. 2018-05-29 14:44:43