Usar
Ctrl-Z
para pausar la aplicación y volver a la línea de comandos. Entonces usa
bg
para permitir que el proceso continúe en segundo plano. Finalmente use
disown
Para que el proceso no se cierre cuando desconectes tu sesión y cierres tu terminal.
El proceso continuará ejecutándose, pero no hay forma de 'volver a conectar' a la terminal para ver el resultado que conozco si se vuelve a conectar a una nueva sesión.
Usar reptyr
Este es exactamente el caso man 1 reptyr
menciona explícitamente:
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 a través de ssh, pero tiene que salir y no quiere interrumpirlo? Simplemente comience un screen
, usa reptyr
para agarrarlo, y luego matar la sesión ssh y volver a casa.
(El manual menciona screen
, puedes usar tmux
en su lugar, lo que prefieras).
No te pierdas esta nota:
reptyr
depende del ptrace(2)
llamada al sistema para adjuntar al programa remoto. En Ubuntu Maverick y superior, esta capacidad está desactivada de forma predeterminada por motivos de seguridad. Puede habilitarlo temporalmente haciendo
echo 0 > /proc/sys/kernel/yama/ptrace_scope
como root, o permanentemente editando el archivo /etc/sysctl.d/10-ptrace.conf
, que también contiene más información sobre esta configuración.
Si el archivo no existe pero el /etc/sysctl.d/
directorio lo hace, entonces probablemente sea suficiente para crearlo con el siguiente contenido:
kernel.yama.ptrace_scope = 0
La configuración se aplicará en el próximo reinicio. Consulte las consideraciones de seguridad a continuación.
Uso básico
El uso básico es simple:
reptyr PID
donde PID
es el PID del proceso que desea adjuntar a una nueva terminal. Nota reptyr
solo adjunta un proceso a otra terminal. Esto no significa que el proceso se convierta en un elemento secundario del nuevo shell.
Consideraciones de seguridad
Ajuste ptrace_scope
como 0
no se recomienda.
A medida que Linux crece en popularidad, se convertirá en un objetivo más importante para el malware. Una debilidad particularmente preocupante de las interfaces de proceso de Linux es que un solo usuario puede examinar la memoria y el estado de ejecución de cualquiera de sus procesos. Por ejemplo, si una aplicación (p. ej., Pidgin) se vio comprometida, un atacante podría conectarse a otros procesos en ejecución (p. ej., Firefox, sesiones SSH, agente GPG, etc.) para extraer credenciales adicionales y continuar ampliando el alcance de su ataque sin recurrir al phishing asistido por el usuario.
Este no es un problema teórico. Los ataques de secuestro de sesión SSH (http://www.storm.net.nz/projects/7) e inyección de código arbitrario (http://c-skills.blogspot.com/2007/05/injectso.html) ya existen y continúan posible si ptrace
se le permite operar como antes. Desde ptrace
no es comúnmente utilizado por personas que no son desarrolladores ni administradores, los creadores de sistemas deben tener la opción de deshabilitar este sistema de depuración.
[…]
La configuración de sysctl (solo se puede escribir con CAP_SYS_PTRACE
) son:
0
- clásico ptrace
permisos:un proceso puede PTRACE_ATTACH
a cualquier otro proceso que se ejecute bajo el mismo uid, siempre que sea volcable […]
1
- restringido ptrace
:un proceso debe tener una relación predefinida con el inferior al que quiere llamar PTRACE_ATTACH
en. Por defecto, esta relación es la de sólo sus descendientes cuando también se cumple el criterio clásico anterior. […]
2
- Adjuntar solo para administradores:solo procesos con CAP_SYS_PTRACE
puede usar ptrace
con PTRACE_ATTACH
, o a través de niños llamando al PTRACE_TRACEME
.
3
- no adjuntar:ningún proceso puede usar ptrace
con PTRACE_ATTACH
ni a través de PTRACE_TRACEME
. Una vez establecido, este valor de sysctl no se puede cambiar.
Un enfoque razonable es establecer ptrace_scope
a 2
y luego permitir reptyr
usar ptrace
:
echo 2 | sudo tee /proc/sys/kernel/yama/ptrace_scope
sudo setcap CAP_SYS_PTRACE+pe /usr/bin/reptyr
No se olvide del archivo que contiene la configuración permanente.
Las capacidades se almacenan en el inodo del archivo. Por lo tanto, no me sorprendería si reptyr
pierde la capacidad cuando se actualiza (reemplazado atómicamente por un nuevo ejecutable).
Puede desasociar totalmente un comando (en bash
o zsh
, posiblemente otros shells) con el disown
dominio. Sin embargo, es posible que el comando no esté contento con esto si requiere un tty, en cuyo caso, consulte el reptyr
respuesta.
$ ssh somecentos7system
-bash-4.2$ sleep 252727
^Z
[1]+ Stopped sleep 252727
-bash-4.2$ bg
[1]+ sleep 252727 &
-bash-4.2$ disown
-bash-4.2$ logout
Connection to somecentos7system closed.
$ ssh somecentos7system
-bash-4.2$ pgrep -lf 252727
20089 sleep
-bash-4.2$
Otra opción es hacer que una sesión de pantalla (o tmux) se inicie automáticamente para que no se olvide de iniciar una porque ya se inició porque usted configuró las cosas de esa manera. Hay otras publicaciones en otros lugares sobre cómo hacerlo.