Chociaż nie możesz ponownie dołączyć się do uszkodzonej sesji SSH, możesz ponownie rozpoznać proces uruchomiony w SSH - funkcjonalnie równoważny z tym, czego chcesz.
Instrukcje
W twoim przypadku przejmiesz apt-getproces kontrolowany z nowej sesji SSH, screensesji itp. Moim ulubionym do tego jest reptyrpolecenie:
$ sudo apt-get install reptyr
$ ps ax | grep apt-get
10626 pts/8 R+ 0:32 apt-get upgrade
Następnie z pid znalezionym dla twojego procesu:
$ sudo reptyr -T 10626
Lub jeśli to nie zadziała, spróbuj:
$ reptyr 10626
Po tym etapie wszystkie dane wprowadzane z klawiatury przechodzą do przejętego programu. Niestety nie zobaczysz starych danych wyjściowych sesji SSH, takich jak dane apt-getwyjściowe z prośbą o potwierdzenie.
Objaśnienia
Istnieje wiele innych narzędzi, które działają w zasadzie tak samo jak reptyr(tzn. Poprzez ptracezałącznik debugowania). Zapoznaj się z następującymi pytaniami i odpowiedziami:
W powyższych instrukcjach reptyr 10626używa ptracezałącznika debugowania, podczas gdy sudo reptyr -T 10626polecenie używa kradzieży TTY i jest preferowane ( szczegóły ).
Wreszcie powodem, dla którego nie można przejąć sesji SSH w ten sposób, jest to, że sshdproces nie jest kontrolowany przez terminal hosta, zamiast tego zapewnia niewolniczą część terminala - ptsurządzenie - podczas gdy kontrolująca go część master znajduje się na komputer kliencki, tutaj z przerwaną sesją SSH pomiędzy. Kiedy wymusza się przejęcie takiego sshdprocesu reptyr -s <pid>, klawiatura wpisuje się w ten proces, a nie w aktywny proces potomny. Więc „Ctrl + Z” po prostu to zabije sshd.
apt-getproces wciąż działał. Powinien był umrzeć wraz z całym łańcuchem procesu aż do SSH. Zauważyłem, żedo-dist-upgradeautomatycznie rozpoczyna się w sesjiscreen/byobu: może w niektórych okolicznościachapt-getto samo?