web-dev-qa-db-fra.com

Déplacer un processus déjà en cours vers Screen

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

Parfois, je démarre un travail à distance sur la console et je réalise plus tard qu'il s'exécute beaucoup plus longtemps que prévu. (Aurait dû commencer celui-ci sous Screen en premier lieu ...)

Je ne veux pas que ma station de travail fonctionne toute la nuit juste pour garder la session VNC ouverte; Je voudrais déplacer ce travail à distance déjà en cours d'exécution dans une session d'écran (sur la boîte à distance), afin que je puisse éteindre la station de travail (et me reconnecter le lendemain matin).

Comment cela peut-il être fait, le cas échéant?

232
DevSolar

Jetez un oeil à reptyr , qui fait exactement cela. La page github contient toutes les informations.

reptyr - Un outil pour "repeupler" les programmes.

reptyr est un utilitaire pour prendre un programme en cours d'exécution et l'attacher à un nouveau terminal. Vous avez démarré un processus de longue durée sur ssh, mais vous devez partir et vous ne voulez pas l'interrompre? Il suffit de démarrer un écran, d'utiliser reptyr pour le saisir, puis de tuer la session ssh et de rentrer à la maison.

USAGE

reptyr PID

"reptyr PID" saisira le processus avec l'ID PID et le rattachera à votre terminal actuel.

Après l'attachement, le processus prendra l'entrée et l'écriture de la sortie vers le nouveau terminal, y compris ^ C et ^ Z. (Malheureusement, si vous le faites en arrière-plan, vous devrez toujours exécuter "bg" ou "fg" dans l'ancien terminal. Ceci est probablement impossible à résoudre de manière raisonnable sans patcher votre Shell.)

229
DaveJohnston

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

Cependant, pour votre problème réel, vous pouvez essayer une autre chose: après avoir lancé votre travail à partir du 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>. Après cela, vous pouvez fermer le terminal en toute sécurité et le travail continuera de s'exécuter.

46
earl

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

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

HTH

à votre santé,

39
Rob Wells