Si bien no puede volver a adjuntar a una sesión SSH interrumpida, puede volver a procesar el proceso que se ejecuta dentro de SSH , funcionalmente equivalente a lo que desea.
Instrucciones
En su caso, se haría cargo del apt-get
proceso para ser controlado desde una nueva sesión SSH, screen
sesión o similar. Mi favorito para esto es el reptyr
comando:
$ sudo apt-get install reptyr
$ ps ax | grep apt-get
10626 pts/8 R+ 0:32 apt-get upgrade
Luego, con el pid que encontraste para tu proceso:
$ sudo reptyr -T 10626
O si eso no funciona, intente:
$ reptyr 10626
Después de esta etapa, toda su entrada de teclado va al programa que asumió. Lamentablemente, no verá la salida anterior de la sesión SSH, como la apt-get
salida que le pide confirmación.
Explicaciones
Hay varias otras herramientas que básicamente funcionan igual que reptyr
(es decir, a través de ptrace
archivos adjuntos de depuración). Vea las siguientes preguntas y respuestas donde se discuten:
En las instrucciones anteriores, reptyr 10626
usa el ptrace
archivo adjunto de depuración mientras que el sudo reptyr -T 10626
comando usa el robo de TTY y es preferible ( detalles ).
Finalmente, la razón por la que no puede hacerse cargo de una sesión SSH de esta manera es porque un sshd
proceso no está controlado por un terminal host, sino que proporciona la parte esclava de un terminal, un pts
dispositivo, mientras que la parte maestra que lo controla reside en el máquina cliente, aquí con una sesión SSH desglosada en el medio. Cuando fuerza la toma de tal sshd
proceso con reptyr -s <pid>
, su entrada de teclado va a ese proceso, no a su proceso secundario activo. Entonces un "Ctrl + Z" simplemente matará eso sshd
.
apt-get
proceso aún se estuviera ejecutando. Debería haber muerto junto con toda la cadena de procesos hasta SSH. Me di cuenta de quedo-dist-upgrade
se inicia automáticamente en unascreen
/byobu
sesión: tal vez en algunas circunstancias, ¿apt-get
hace lo mismo?