Sebbene non sia possibile ricollegarsi a una sessione SSH interrotta, è possibile ripartire il processo in esecuzione all'interno di SSH , funzionalmente equivalente a quello desiderato.
Istruzioni
Nel tuo caso, assumerai il controllo del apt-getprocesso da una nuova sessione SSH, screensessione o simili. Il mio preferito per questo è il reptyrcomando:
$ sudo apt-get install reptyr
$ ps ax | grep apt-get
10626 pts/8 R+ 0:32 apt-get upgrade
Quindi, con il pid che hai trovato per il tuo processo:
$ sudo reptyr -T 10626
O se non funziona, prova:
$ reptyr 10626
Dopo questa fase, tutti i tuoi input da tastiera vanno al programma che hai assunto. Sfortunatamente non vedrai l'output precedente della sessione SSH, come l' apt-getoutput che ti chiede conferma.
spiegazioni
Esistono diversi altri strumenti che funzionano sostanzialmente allo stesso modo reptyr(ovvero tramite l' ptraceallegato di debug). Vedi le seguenti domande e risposte in cui vengono discusse:
Nelle istruzioni sopra, reptyr 10626usa l' ptraceallegato di debug mentre il sudo reptyr -T 10626comando usa il furto TTY ed è preferibile ( dettagli ).
Infine, il motivo per cui non è possibile assumere una sessione SSH in questo modo è perché un sshdprocesso non è controllato da un terminale host, ma fornisce la parte slave di un terminale - un ptsdispositivo - mentre la parte master che lo controlla risiede sul macchina client, qui con una sessione SSH suddivisa in mezzo. Quando si forza a subentrare a tale sshdprocesso con reptyr -s <pid>, l'input da tastiera passa a quel processo, non al suo processo figlio attivo. Quindi un "Ctrl + Z" lo ucciderà semplicemente sshd.
apt-getprocesso fosse ancora in corso. Sarebbe dovuto morire insieme all'intera catena di processi fino a SSH. Ho notato chedo-dist-upgradesi avvia automaticamente in unascreen/byobusessione: forse in alcune circostanze,apt-getfa lo stesso?