Tengo un programa en ejecución en un shell SSH. Quiero pausarlo y poder reanudar su ejecución cuando regrese.
Una forma en que pensé en hacerlo fue transferir su propiedad a un shell de pantalla, manteniéndolo así funcionando allí.
¿Hay alguna forma diferente de proceder?
Respuesta aceptada:
Puede revocar la "propiedad" del programa desde el shell con disown
integrado:
# press Ctrl+Z to suspend the program
bg
disown
Sin embargo, esto solo le dice al shell que no envíe un SIGHUP
señal al programa cuando el shell sale. El programa conservará cualquier conexión que tenga con el terminal, generalmente como flujos estándar de entrada, salida y error. No hay forma de volver a conectarlos a otro terminal. (La pantalla funciona emulando un terminal para cada ventana, por lo que los programas se adjuntan a la ventana de la pantalla).
Es posible volver a adjuntar los descriptores de archivo a un archivo diferente adjuntando el programa en un depurador (es decir, usando ptrace
) y haciéndolo llamar open
, dup
y close
. Hay algunas herramientas que hacen esto; este es un proceso complicado y, a veces, bloquearán el proceso. Las posibilidades incluyen (enlaces recopilados de las respuestas a ¿Cómo puedo desautorizar un proceso en ejecución y asociarlo a un nuevo shell de pantalla? y ¿Puedo nohup/filtrar un proceso ya iniciado?):
- agarrar (y el criopid más ambicioso)
- Neercs
- redireccionar
- reptyr
- retty