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-get
proces kontrolowany z nowej sesji SSH, screen
sesji itp. Moim ulubionym do tego jest reptyr
polecenie:
$ 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-get
wyjś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 ptrace
załącznik debugowania). Zapoznaj się z następującymi pytaniami i odpowiedziami:
W powyższych instrukcjach reptyr 10626
używa ptrace
załącznika debugowania, podczas gdy sudo reptyr -T 10626
polecenie 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 sshd
proces nie jest kontrolowany przez terminal hosta, zamiast tego zapewnia niewolniczą część terminala - pts
urzą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 sshd
procesu 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-get
proces wciąż działał. Powinien był umrzeć wraz z całym łańcuchem procesu aż do SSH. Zauważyłem, żedo-dist-upgrade
automatycznie rozpoczyna się w sesjiscreen
/byobu
: może w niektórych okolicznościachapt-get
to samo?