Ранее я подключался к длительному сеансу экрана с screen -dr control
. Однако иногда эта команда не присоединяется к экрану и вместо этого зависает навсегда (через 10 с лишним минут после этого я прервалась). Это происходит только тогда, когда соединение SSH неожиданно обрывается, а не тогда, когда экран должным образом отключен Ctrl-A d
. Другие переключатели, такие как screen -x
или screen -D -RR
также не работают.
Этот пост предлагает убить PTY, который содержит сеанс экрана, что заставит экран завершить его отключение. Однако он просто убивает оболочку, из которой 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 -ls
говорит в этих «висящих» случаях?screen -d -r <session>
означает «отсоединить и восстановить», поэтому не имеет значения, не отрывая его от себя. (И делать это часто, это не ...)