Я ранее повторно подключался к длительному сеансу экрана с screen -dr control
. Однако иногда эта команда не прикрепляется к экрану и вместо этого зависает навсегда (10+ минут, после чего я прервал). Это происходит только тогда, когда соединение SSH неожиданно прерывается, а не когда экран правильно отсоединен с помощью Ctrl-A d
. Другие переключатели, такие как screen -x
или screen -D -RR
тоже не работают.
Эта почта предлагает убить PTY, который удерживает сеанс экрана, что приведет к отключению screen. Однако он просто убивает снаряд, из которого screen -dr control
назывался.
Например:
$ 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
Связанный пост предлагает убить bash
процесс с PID 7109. Это также убьет screen -dr control
процесс с PID 7387. После этого я все еще не могу подключиться к экрану.
Процесс SCREEN -S control
который запустил сеанс экрана, init
как его родителя, которого я, очевидно, не могу убить.
Есть ли способ повторно подключиться к сеансу зависания экрана?
Обновление: это происходит в CentOS 6.4 с использованием ядра 2.6.32-358.6.1.el6.x86_64. Все оболочки представляют собой выпуск bash версии 4.1.2 (1).
Я думаю тебе стоит попробовать
screen -DR
в следующий раз тоже - сердитый (заглавный) вызов должен заставить его отключить этот другой сеанс, который удерживается вашим промежуточным прыжком netcat.
Как предположил Йенс Тиммерман, основной причиной такого странного поведения было то, что я подключался к удаленному серверу с помощью SSH ProxyCommand и ncat
. После убийства ncat
на промежуточном компьютере я могу повторно подключиться к сеансу экрана.
Если это частая проблема, вы также можете рассмотреть возможность использования mosh в качестве замены ssh: