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-get
processo da una nuova sessione SSH, screen
sessione o simili. Il mio preferito per questo è il reptyr
comando:
$ 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-get
output che ti chiede conferma.
spiegazioni
Esistono diversi altri strumenti che funzionano sostanzialmente allo stesso modo reptyr
(ovvero tramite l' ptrace
allegato di debug). Vedi le seguenti domande e risposte in cui vengono discusse:
Nelle istruzioni sopra, reptyr 10626
usa l' ptrace
allegato di debug mentre il sudo reptyr -T 10626
comando usa il furto TTY ed è preferibile ( dettagli ).
Infine, il motivo per cui non è possibile assumere una sessione SSH in questo modo è perché un sshd
processo non è controllato da un terminale host, ma fornisce la parte slave di un terminale - un pts
dispositivo - 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 sshd
processo 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-get
processo fosse ancora in corso. Sarebbe dovuto morire insieme all'intera catena di processi fino a SSH. Ho notato chedo-dist-upgrade
si avvia automaticamente in unascreen
/byobu
sessione: forse in alcune circostanze,apt-get
fa lo stesso?