Sesja ekranowa się nie odłączy, teraz się nie przyłączy

2

Zazwyczaj loguję się do mojego Linux-a z laptopa z systemem Windows za pomocą PuTTY i tam uruchamiam ekran. Kiedy moi korporacyjni władcy postanowili zaktualizować laptopa do systemu Windows 7, moje sesje PuTTY były zawieszone. Zazwyczaj zabijam sesję PuTTY, a następnie albo ponownie dołączam sesję screen (jeśli się odłączyła), albo wydaje „-d -r”, jeśli sesja screen nie odłączyła się, gdy moja sesja PuTTY zamarła.

Mój problem polega na tym, że mam sesję ekranową, która początkowo odmawiała odłączenia. Użyłbym:

screen -d -r 6313.sessionName

ale polecenie po prostu tam wisiało.

Odkryłem, że w katalogu / var / run / screen // znajdowały się „pliki” odpowiadające każdej z moich sesji screen. Zauważyłem, że ten uparty ma 700 uprawnień, podczas gdy inne (które zostały odłączone) mają 600 uprawnień.

Więc zmieniłem uprawnienia do tego pliku na 600. Screen wyświetla teraz jako „odłączony”. Jednak gdy próbuję ponownie do niego dołączyć, polecenie po prostu ponownie się zawiesza.

Za pomocą

ps aux | grep 6313

pokazuje stan procesu jako „Ss”, co oznacza, że ​​jest on w stanie przerywanym. Nie różni się to niczym od innych odłączonych sesji ekranowych, które pokazują ten sam status procesu.

Nie wiem, jak odzyskać tę sesję. Jakieś sugestie?

Phileas Fogg
źródło
Prawdopodobnie nie pomoże teraz, ale jak rozpocząć sesję ekranową, jak ją rozpocząć? Zawsze używałem screen -S <name>, aby każda sesja miała nazwę, którą znam. W ten sposób, gdy chcę się rozłączyć i ponownie połączyć, mogę użyć tej nazwy zamiast PID, takiego jak screen -r <name>lubscreen -dr <name>
Kruug
Tak też to zaczynam. Ale identyfikator procesu jest poprzedzony nazwą. Na przykład 6313.mysession
phileas fogg
Czy ręcznie prefiksujesz pid? Powinieneś być w stanie uzyskać do niego dostęp tylko poprzez odwołanie się mysessionzamiast pid.mysession.
Kruug,
Nie, screen dodaje to automatycznie do nazwy mojej sesji. I tak, mogę się do niego odwoływać, używając tylko nazwy sesji (o ile nazwa sesji jest unikalna). Sesje zwykle nazywam po hoście, na którym jestem zalogowany.
phileas fogg
Następnie, po użyciu -Sflagi, powinieneś być w stanie odwoływać się tylko do tego mysessionbez potrzeby używania prefiksu pid.
Kruug,

Odpowiedzi:

0

Kiedy używam screenpolecenia, zwykle otwieram gniazdo w następujący sposób:

$ screen -S <SOCKET_NAME>

a kiedy chcę dołączyć lub ponownie dołączyć, używam:

$ screen -x <SOCKET_NAME>
Rodrigo Catto
źródło
Jak wyjaśniłem w pierwszej odpowiedzi, już to robię. A screen -x jest trybem „szpiegowskim”. Nie dołącza się do sesji, jak robi to za pomocą „-r”. Też tego próbowałem. Te same wyniki.
Phileas fogg
@phileasfogg-x Attach to a not detached screen. (Multi display mode).
Rodrigo Catto,
@phileasfogg Spróbuj tego:-D -RR Do whatever is needed to get a screen session.
Rodrigo Catto,
„-RR” utworzy nową sesję o tej samej nazwie, jeśli nie będzie w stanie odłączyć drugiej sesji. Nie tego chcę. Mam kilka zadań, które muszą pozostać uruchomione, a także kilka plików, które edytowałem, których nie chcę utracić.
Phileas fogg
@phileasfogg jaka jest wersja ekranu poleceń?
Rodrigo Catto,
-1

Aby odłączyć sesję ekranową, użyj Ctrl+ A+ D. Następnie, aby ponownie dołączyć sesję, użyj screen -r <pid>. Jeśli chcesz połączyć się z używaną sesją ekranową, użyj screen -dr <pid>najpierw, aby odłączyć, a następnie ponownie podłączyć sesję ekranową.

Kruug
źródło
Tak, próbowałem już tego, jak wyjaśniono powyżej.
phileas fogg
Stwierdziłeś, że próbujesz go odłączyć, screen -d -r 6313.sessionNameale to działa tylko na oderwanie, a następnie ponowne nałożenie. W tym momencie pojawiło się zamieszanie. Jeśli chcesz po prostu odłączyć ekran, nie skorzystasz z -r.
Kruug,
Próbowałem ponownie podłączyć, ale ponieważ „screen -ls” pokazywał je jako „dołączone”, najpierw musiałem je odłączyć.
Phileas fogg