Wcześniej ponownie przyłączyłem się do długotrwałej sesji ekranowej z screen -dr control
. Czasami jednak to polecenie nie łączy się ponownie z ekranem i zamiast tego zawiesza się na zawsze (ponad 10 minut, po których przerwałam). Dzieje się tak tylko wtedy, gdy połączenie SSH zostaje nieoczekiwanie zerwane, a nie przy odpowiednim odłączeniu ekranu Ctrl-A d
. Inne przełączniki, takie jak screen -x
lub screen -D -RR
też nie działają.
Ten post sugeruje zabicie PTY, która przechowuje sesję screen, co spowoduje, że screen zakończy swoje rozłączanie. Jednak po prostu zabija powłokę, z której screen -dr control
została wywołana.
Na przykład:
$ ps -ef | grep control | grep -v grep
nomad 7387 7109 0 13:05 pts/50 00:00:00 screen -dr control
nomad 15299 1 0 Nov27 ? 00:13:47 SCREEN -S control
$ ps -ef | grep bash | grep 'pts/50'
nomad 7109 7108 0 12:49 pts/50 00:00:00 -bash
Połączony post sugeruje zabicie bash
procesu za pomocą PID 7109. Spowoduje to również zabicie screen -dr control
procesu za pomocą PID 7387. Potem nadal nie mogę połączyć się z ekranem.
Proces, SCREEN -S control
który rozpoczął sesję ekranową, ma init
za swój element nadrzędny, którego oczywiście nie mogę zabić.
Czy istnieje sposób ponownego przyłączenia się do sesji ekranu zawieszonego?
Aktualizacja: Dzieje się tak w CentOS 6.4 przy użyciu jądra 2.6.32-358.6.1.el6.x86_64. Wszystkie powłoki są wydane w wersji bash 4.1.2 (1).
screen -ls
mówi w tych „wiszących” przypadkach?screen -d -r <session>
oznacza „odłącz i odzyskaj”, więc nie odłączenie go z pierwszej ręki nie powinno mieć znaczenia. (A za robienie tego często, nie robi ...)