Mover un proceso que ya se está ejecutando a Screen

222

Mi trabajo de oficina rutinariamente me ve conectado a una caja de Linux a través de VNC.

A veces comienzo un trabajo remoto en la consola y luego me doy cuenta de que dura mucho más de lo esperado. (En primer lugar, debería haber comenzado ese debajo de Pantalla ...)

No quiero mantener mi estación de trabajo ejecutándose durante la noche solo para mantener abierta la sesión de VNC; Me gustaría mover ese trabajo remoto que ya se está ejecutando a una sesión de pantalla (en la caja remota), para poder apagar la estación de trabajo (y volver a conectar a la mañana siguiente).

¿Cómo puede hacerse esto, si es que lo hace?

DevSolar
fuente
2
y es un error , serverfault.com/questions/49877/… , parece que no se puede hacer.
Paul Dixon
Busca el guión de screenify.
Vashu

Respuestas:

217

Echa un vistazo a reptyr , que hace exactamente eso. La página de github tiene toda la información.

reptyr: una herramienta para "volver a poner" programas.

reptyr es una utilidad para tomar un programa en ejecución existente y adjuntarlo a una nueva terminal. ¿Comenzó un proceso de larga duración sobre ssh, pero tiene que irse y no quiere interrumpirlo? Simplemente inicie una pantalla, use reptyr para tomarla, y luego cierre la sesión ssh y diríjase a casa.

USO

reptyr PID

"reptyr PID" tomará el proceso con ID PID y lo conectará a su terminal actual.

Después de adjuntar, el proceso tomará la entrada y escribirá la salida en el nuevo terminal, incluidos ^ C y ^ Z. (Desafortunadamente, si lo pone en segundo plano, aún tendrá que ejecutar "bg" o "fg" en la terminal anterior. Es probable que esto sea imposible de solucionar de manera razonable sin parchear su shell).

DaveJohnston
fuente
22
Si, como yo, miró el enlace de arriba y consideró brevemente la instalación del programa desde la fuente, anímese: está a un paso de apt-getdistancia en los sistemas Debian.
mlissner
3
Esto funciona muy bien, ¿cómo no he visto esto antes?
escritura 02392
3
¡Esto es asombroso! ¡Lo votaría 10 veces si pudiera! Además, reptyr también está disponible en repositorios RedHat. Simplemente 'yum install' para obtenerlo.
Mark J. Bobak
55
No funciona, excepto en los casos más triviales:Unable to attach. (This most commonly means that 11690 has a suprocesses)
Mehrdad
2
Al menos como root, puedes usarreptyr -T PID
ChristophK
45

No puedes hacer esto, fácilmente. Sugeriría hacer un hábito iniciar la pantalla como lo primero que haces después de abrir una consola.

Sin embargo, para su problema real, hay otra cosa que podría intentar: después de haber iniciado su trabajo desde la terminal, en segundo plano escribiendo ctrl-z y luego bg. Después de eso, separe el trabajo de su shell principal; en bash que harías disown -h %<jobid>. Después de eso, puede cerrar el terminal de manera segura y el trabajo continuará ejecutándose.

conde
fuente
3
Esto funcionó muy bien para mi caso. reptyr y retty no pudieron tomar el proceso, pero todo lo que necesitaba era poder cerrar una terminal y dejar que el proceso se ejecutara.
STW
10
FYI: después de desconocer el proceso, se puede volver a escribir en la pantalla .
Adam
1
Esto mató mi programa en ejecución :(
Mehrdad
39

Mientras usa Linux, ¿qué pasa con el uso de retty dentro del proceso de pantalla recién lanzado?

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

HTH

salud,

Rob Wells
fuente
1
No sabía de retty, gracias. Sin embargo, para el tipo de trabajos de larga duración que tengo en mente, soy un poco reacio a usar una herramienta que se refiere a sí misma como "probada muy ligeramente". Voy con la solución de Earl.
1
No veo retty en Gentoo
Sergei
no se puede adjuntar a 4858
Arnold Roa