Déplacement d'un processus en cours d'exécution vers Screen

222

Mon travail de bureau me voit régulièrement connecté à une machine Linux via VNC.

Parfois, je lance un travail distant sur la console et me rend compte plus tard qu'il s'exécute beaucoup plus longtemps que prévu. (Aurait dû commencer celui-ci sous l'écran en premier lieu ...)

Je ne veux pas laisser mon poste de travail fonctionner pendant la nuit pour garder la session VNC ouverte; Je souhaite déplacer ce travail distant en cours d'exécution vers une session Screen (sur le boîtier distant), afin de pouvoir éteindre le poste de travail (et vous reconnecter le lendemain matin).

Comment cela peut-il être fait, voire pas du tout?

DevSolar
la source
2
et c'est une dupe, serverfault.com/questions/49877/… - semble que cela ne peut pas être fait.
Paul Dixon
Recherchez le script screenify.
Vashu

Réponses:

217

Jetez un coup d'œil à reptyr , qui fait exactement cela. La page github contient toutes les informations.

reptyr - Un outil pour "re-ptying" des programmes.

reptyr est un utilitaire permettant de reprendre un programme en cours et de le connecter à un nouveau terminal. Vous avez démarré un processus long sur ssh, mais vous devez partir et vous ne voulez pas l'interrompre? Commencez juste un écran, utilisez reptyr pour le saisir, puis tuez la session SSH et rendez-vous à la maison.

USAGE

PID reptyr

"reptyr PID" va saisir le processus avec l'identifiant PID et l'attacher à votre terminal actuel.

Après la connexion, le processus prend les entrées et écrit les sorties sur le nouveau terminal, y compris ^ C et ^ Z. (Malheureusement, si vous avez un problème d’arrière-plan, vous devrez toujours exécuter "bg" ou "fg" dans l’ancien terminal. Il est probablement impossible de le réparer de manière raisonnable sans appliquer de correctif à votre shell.)

DaveJohnston
la source
22
Si, comme moi, vous avez examiné le lien ci-dessus et avez brièvement envisagé d'installer le programme à partir des sources, ne vous inquiétez pas: c'est tout simplement un système apt-getabsent des systèmes Debian.
mlissner
3
Cela fonctionne très bien, comment n'ai-je pas vu cela auparavant?
deed02392
3
C'est génial! Je le voterais 10 fois si je pouvais! De plus, reptyr est également disponible dans les dépôts RedHat. Juste 'yum install' pour l'obtenir.
Mark J. Bobak
5
Ne fonctionne pas, sauf dans les cas les plus triviaux:Unable to attach. (This most commonly means that 11690 has a suprocesses)
Mehrdad
2
Au moins en tant que root, vous pouvez utiliserreptyr -T PID
ChristophK
45

Vous ne pouvez pas faire cela facilement. Je suggère de prendre l'habitude de démarrer screen comme la première chose à faire après l'ouverture d'une console.

Cependant, en ce qui concerne votre problème actuel, vous pouvez essayer une autre chose: après avoir lancé votre travail depuis le terminal, mettez-le en arrière-plan en tapant ctrl-z, puis bg. Après cela, détachez le travail de son shell parent; en bash tu ferais disown -h %<jobid>. Ensuite, vous pouvez fermer le terminal en toute sécurité et le travail continuera à être exécuté.

comte
la source
3
Cela a très bien fonctionné pour mon cas. Reptyr et Retty n'ont pas réussi à saisir le processus, mais tout ce dont j'avais besoin, c'était de pouvoir fermer un terminal et laisser le processus s'exécuter.
STW
10
FYI: après avoir désavoué le processus, il peut être modifié à l' intérieur de l' écran .
Adam
1
Cela a tué mon programme de course à pied :(
Mehrdad
39

Lorsque vous utilisez Linux, qu’en est-il de l’utilisation de retty dans le processus d’écran récemment lancé?

$ screen -S my_process
$ retty $(pgrep my_process)
/redraw

HTH

à votre santé,

Rob Wells
la source
1
Je ne connaissais pas Retty, merci. Cependant, pour les travaux de longue durée auxquels je pense, je suis un peu réticent à utiliser un outil qui se dit "très légèrement testé". Je vais avec la solution de Earl.
1
voir aucune retty à Gentoo
Sergei
ne peut pas attacher à 4858
Arnold Roa