Używałem irssi na ekranie, ale straciłem połączenie. Po ponownym zalogowaniu się na serwerze nie mogę już dołączyć do tego ekranu. screen -ls pokazuje, że ekran jest już podłączony.
Próbowałem screen -D, aby wymusić odłączenie, i powiedział: odłącz, ale screen -ls wciąż mówi, że jest podłączony. Próbowałem screen -x i po prostu się tam wisi.
[sub@server ~]$ screen -ls
There are screens on:
4033.poe (Detached)
7728.irssi (Attached)
2 Sockets in /var/run/screen/S-sub.
Co mogę teraz zrobić?
źródło
Nadałeś mu nazwę inną niż domyślna. Spróbuj tego:
screen -RD irssi
źródło
możesz spróbować:
zawsze dobrym pomysłem jest użycie pełnej nazwy
pid.tty
źródło
screen
jest znany z tego, że nie jest kompatybilny wstecz między wersjami. Jeśli wersjascreen
została zaktualizowana na serwerze, możliwe, że nie będzie można ponownie podłączyć się do starszych sesji ekranowych.W takim przypadku możesz albo użyć starego pliku binarnego SCREEN, aby ponownie podłączyć (pod warunkiem, że gdzieś go zapisał menedżer pakietu dystrybucyjnego), lub całkowicie zabić sesję.
źródło
Odniosłem pewien sukces, wysyłając proces GNU / screen SIGCHLD (który normalnie odbiera, gdy okno jest zamknięte), co zmusza go do dotknięcia (i ewentualnie odtworzenia) pliku gniazda.
Zauważ również, że istnieją dwa sposoby na wywołanie
screen
pliku wykonywalnego, które różnią się tylko w przypadku:SCREEN
jest to komponent po stronie serwera, z którym próbujesz się ponownie połączyć, podczas gdyscreen
po stronie klienta tasuje dane między twoim terminalem a stroną po stronie serwera. Więc możesz spróbować zabić małą literę ...Na przykład poniżej widać, że moje
screen
iSCREEN
procesy nie są uważane za nadrzędne i podrzędne, co wskazuje, że dołączyłem do istniejącej sesji.Świeże sesje wyglądają mniej więcej tak:
źródło
kill
komendy w następujący sposób:kill -s SIGCHLD <PID>
gdzie<PID>
jest numer identyfikatora procesu (najbardziej lewa kolumna w moim przykładowym wyniku)Zdarzyło mi się to, gdy korzystałem z vi, gdy sesja zamarła, a ja się rozłączyłem. Podczas próby ponownego podłączenia do ekranu za pomocą screen -Arx proces po prostu się zawiesił.
Może być uruchomiony podobny proces potomny powodujący zawieszenie się ekranu. Jeśli przypomnisz sobie jedno, na którym się szczególnie skupiasz, w przeciwnym razie, aby uzyskać listę procesów potomnych uruchomionych pod twoim ekranem, wykonaj:
Które pokażą zagnieżdżone procesy potomne:
Po zabiciu procesu vi, który spowodował problem, mogłem ponownie podłączyć ekran bez żadnych problemów. Dobrym pomysłem jest również zabicie wszystkich wcześniejszych procesów, które zostały ponownie podłączone do ekranu. Po prostu użyj:
Nie wiem, co robi ekran wewnętrznie, dlaczego vi spowodowało zawieszenie się ekranu, ani dlaczego zabicie procesu vi przywróciło mój ekran. W przeszłości miałem ten problem z ekranem i próbowałem bez powodzenia tego, co większość ludzi polecała w tym wątku. Znalezienie tego problemu proces potomny jest jedyną rzeczą, która działała dla mnie i działała konsekwentnie.
źródło
źródło
To zadziałało dla mnie. Miałem 3 różne ekrany i straciłem 3 różne połączenia ssh. Po ponownym połączeniu ekrany były nadal podłączone, wydałem polecenie powyżej ... oczywiście straciłem obecne połączenie, ale było nowe. Przy następnym ponownym podłączeniu każdy ekran został odłączony.
Uwaga: jeśli jesteś superużytkownikiem, powinieneś użyć
--user
opcji, aby zabić tylko swoje demony ssh.źródło