Spostamento di un processo già in esecuzione sullo schermo


222

Il mio lavoro d'ufficio mi vede regolarmente connesso a un box Linux tramite VNC.

A volte inizio un lavoro remoto sulla console e realizzo in seguito che funziona molto più a lungo del previsto. (Avrebbe dovuto iniziare quello sotto lo schermo in primo luogo ...)

Non voglio mantenere la mia workstation in funzione durante la notte solo per mantenere aperta la sessione VNC; Vorrei spostare quel lavoro remoto già in esecuzione in una sessione dello schermo (sulla scatola remota), in modo da poter spegnere la workstation (e riconnettermi il mattino successivo).

Come può essere fatto, se non del tutto?


2
ed è un duplicato, serverfault.com/questions/49877/… - sembra che non possa essere fatto.
Paul Dixon,




Cerca script screenify.
Vashu,

Risposte:


217

Dai un'occhiata a reptyr , che fa esattamente questo. La pagina di github contiene tutte le informazioni.

reptyr - Uno strumento per i "re-ptying" programmi.

reptyr è un'utilità per prendere un programma in esecuzione esistente e collegarlo a un nuovo terminale. Ha iniziato un processo di lunga durata su ssh, ma devi partire e non vuoi interromperlo? Basta avviare una schermata, usare reptyr per afferrarla, quindi uccidere la sessione ssh e andare a casa.

USO

reptyr PID

"reptyr PID" afferrerà il processo con ID PID e lo collegherà al terminale corrente.

Dopo il collegamento, il processo prenderà l'input e scriverà l'output sul nuovo terminale, inclusi ^ C e ^ Z. (Sfortunatamente, se lo sfondo, dovrai comunque eseguire "bg" o "fg" nel vecchio terminale. Questo è probabilmente impossibile da risolvere in modo ragionevole senza patchare la shell.)


22
Se, come me, hai guardato il link sopra e hai brevemente pensato di installare il programma dal sorgente, prendi il cuore: è solo un apt-getlontano sui sistemi Debian.
mlissner,

3
Funziona benissimo, come non l'ho mai visto prima?
deed02392,

3
Questo e spettacolare! Lo voterei 10 volte se potessi! Inoltre, reptyr è disponibile anche nei repository RedHat. Basta 'yum install' per ottenerlo.
Mark J. Bobak,

5
Non funziona se non nei casi più banali:Unable to attach. (This most commonly means that 11690 has a suprocesses)
Mehrdad,

2
Almeno come root, puoi usarereptyr -T PID
ChristophK il

45

Non puoi farlo facilmente. Suggerirei di prendere l'abitudine di avviare lo schermo come prima cosa che fai dopo aver aperto una console.

Tuttavia, per il tuo vero problema, c'è un'altra cosa che potresti provare: dopo aver avviato il tuo lavoro dal terminale, mettilo in background digitando ctrl-z e poi bg. Successivamente, staccare il lavoro dalla shell madre; in bash lo faresti disown -h %<jobid>. Successivamente, è possibile chiudere in sicurezza il terminale e il lavoro continuerà a essere eseguito.


3
Questo ha funzionato molto bene per il mio caso. reptyr e retty non sono riusciti ad afferrare il processo, ma tutto ciò di cui avevo bisogno era essere in grado di chiudere un terminale e lasciare il processo in esecuzione.
STW,

10
Cordiali saluti: dopo aver rinnegato il processo, può essere ripetuto all'interno dello schermo .
Adam,

1
Questo ha ucciso il mio programma di corsa :(
Mehrdad,

39

Mentre usi Linux, che ne dici di usare retty all'interno del processo dello schermo appena lanciato?

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

HTH

Saluti,


1
Non sapevo di Retty, grazie. Tuttavia, per il tipo di lavori di lunga durata che ho in mente, sono un po 'riluttante a utilizzare uno strumento che si definisce "testato alla leggera". Vado con la soluzione di Earl.

1
non vedo nulla di buono in Gentoo
Sergei,

non può attaccare a 4858
Arnold Roa il
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.