sviluppo-web-qa.it

Spostamento di un processo già in esecuzione sullo schermo

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?

232
DevSolar

Dai un'occhiata a reptyr , che fa esattamente questo. La pagina 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 si fa in background, sarà comunque necessario eseguire "bg" o "fg" nel vecchio terminale. Questo è probabilmente impossibile da risolvere in modo ragionevole senza patchare Shell.)

229
DaveJohnston

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 faresti disown -h %<jobid>. Successivamente, è possibile chiudere in sicurezza il terminale e il lavoro continuerà a essere eseguito.

46
earl

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,

39
Rob Wells