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?


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).


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.


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,


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
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.