Je veux terminer une instance de GNU screen
tout en préservant le processus en cours d'exécution à l'intérieur.
J'ai donc ouvert mon programme d'émulation de terminal normal et exécuté l'écran. Ensuite, j'ai utilisé cette instance de screen
pour exécuter ./script_x.sh
. Maintenant, pour une raison quelconque, je veux arrêter d'utiliser screen
mais script_x.sh
n'a pas encore terminé sa tâche et je ne suis pas prêt à renoncer à mes progrès.
Puis-je garder le processus actif en vie afin de continuer à y travailler à l'intérieur de mon émulateur de terminal normal?
screen
session.screen
. Je voulais arrêter d'utiliserscreen
. Je ne voulais pas arrêter le programme qui s'exécutait à l'intérieurscreen
. C'est ça. Je ne sais pas comment clarifier la situation ou l'exprimer plus simplement que cela.Réponses:
TLDR: Réponse pratique: Non.
Réponse plus longue:
En théorie, vous le pouvez. Si vous avez commencé quelque chose comme
nohup myprog &
à l'intérieur de l'écran, il continuera de fonctionner. Il ignorera un signal de raccrochage et n'aura aucune entrée, mais en théorie, vous pouvez continuer à travailler avec lui.En pratique, ce n'est pas le cas. Ainsi, sauf si vous voulez attacher un débogueur au processus en cours et réécrire ses descripteurs de fichiers et vous assurer que le processus gère les signaux -1 lorsque vous fermez l'écran ... alors la réponse est non.
Si vous êtes prêt à le faire, j'ai un signet à la maison indiquant [SU] où quelqu'un a fait exactement cela . Enregistré pour la génialité, pas parce que c'est facile et trivial à faire.
la source
disown
ou à un niveau inférieur) afin qu'aucunSIGHUP
ne soit envoyé lorsque le processus parent est mort. La reconnexion des E / S est une autre chose - c'est là que le débogueur entre en jeu.nohup
si vous êtes dans une coquille de contrôle de l' emploi (commebash
,ksh
,csh
,zsh
,ash
, etc.). Si vous utilisez toujours un shell de contrôle autre que Job comme Bourne,sh
il est peut-être temps de mettre à niveau.Vous pouvez essayer d'utiliser
reptyr
pour rattacher l'application déjà en cours d'exécution à un autre terminal. Cependant, il a quelques problèmes avec l'envoi du processus en arrière-plan.Je viens de le tester (démarrer à l'
htop
intérieurscreen
,reptyr
vers un autre terminal, tuerscreen
), et cela semblait bien fonctionner. C'est toujours une solution vraiment hacky, donc aucune garantie.la source
Oui (si "tuer" ne tue pas vraiment), c'est en fait exactement à cela que sert l'écran. Vous devriez vérifier le manuel et essayer celui qui correspond à vos besoins:
Ensuite, vous aurez besoin des options de ligne de commande -D / -d -R / -r de l'écran, selon votre choix.
la source