Как восстановить 'проигранную' экранную сессию?

Ваша оболочка запускает эти программы как дочерние процессы. При выполнении pstree, Вы видите эти отношения. Я не знаю, можно ли управлять им.

81
25.01.2012, 19:17
4 ответа

Попытайтесь отсоединить его сначала с screen -d. Если это не работает, можно попробовать в увеличивающемся порядке акцента,

   -d|-D [pid.tty.host]
        does  not  start screen, but detaches the elsewhere running screen session. It has the
        same effect as typing "C-a d" from screen's controlling terminal. -D is the equivalent
        to  the  power  detach key.  If no session can be detached, this option is ignored. In
        combination with the -r/-R option more powerful effects can be achieved:

   -d -r   Reattach a session and if necessary detach it first.

   -d -R   Reattach a session and if necessary detach or even create it first.

   -d -RR  Reattach a session and if necessary detach or create it. Use the first  session  if
           more than one session is available.

   -D -r   Reattach a session. If necessary detach and logout remotely first.

   -D -R   Attach  here and now. In detail this means: If a session is running, then reattach.
           If necessary detach and logout remotely first.  If it was not running create it and
           notify the user. This is the author's favorite.

   -D -RR  Attach here and now. Whatever that means, just do it.
109
27.01.2020, 19:30
  • 1
    -d -r опции вместе вызовут присоединение та сессия. –  Tim Kennedy 09.01.2012, 17:00
  • 2
    я всегда использую screen -x таким образом, я могу присоединить от нескольких местоположений сразу. Конечно, если Вы случайно закрываете окно, оно походит -d -r лучше только для хранения вещей опрятными. –  mpontillo 10.01.2012, 03:29

Если вы не связаны grep , вы можете использовать awk и разделить записи на :

awk 'BEGIN {RS=":"} /^\/opt\/gnome$/'
-121--42397-

Я не знаю, достаточно ли это для ответа, но

grep -w "/opt/gnome"

удовлетворит вашу потребность.

echo '/sbin:/usr/sbin:/opt/gnome:/var/opt/gnome' | grep -w "/opt/gnome" -o
/opt/gnome
echo '/opt/gnome:/sbin:/usr/sbin:/var/opt/gnome' | grep -w "/opt/gnome" -o
/opt/gnome

, но

echo '/opt/gnome:/sbin:/usr/sbin:/var/opt/gnome' | grep "/opt/gnome" -o
/opt/gnome
/opt/gnome
-121--42399-

Я столкнулся с той же проблемой после того, как мое ssh-соединение неожиданно закрылось сообщением Write Failed: breaked pipe , пока у меня был подключен сеанс экрана. Тем не менее, я не смог получить мой сеанс экрана для повторного подключения с помощью любой из команд выше. Обратите внимание, что я использую следующую версию:

~> screen --version
Screen version 4.00.03 (FAU) 23-Oct-06

Видимо, еще был экземпляр sshd , который удерживал меня от отсоединения и повторного подключения сеанса. После идентификации PID соответствующего экземпляра sshd и kill после его повторного подключения с помощью экрана -r .


Только для информации: Вы определенно найдете несколько sshd демонов, один будет соответствовать вашему текущему имени входа и другой, принадлежащий устаревшему экранному сеансу (действительно, может быть несколько других sshd , работающих, принадлежащих нескольким другим экранным сеансам).

4
27.01.2020, 19:30

Каталоги являются файлами, поскольку в системах Linux используется универсальная модель ввода-вывода . В модели все в системе является файлом, и к нему можно получить доступ с помощью одних и тех же системных вызовов и различных команд.

Они имеют особый тип, потому что их i-узлы имеют метку для типа файла и имеют специальную структуру, состоящую в том, чтобы быть таблицей имен файлов и ссылок на другие i-узлы. Эти пары имя-ссылка, также известные как «hardlinks», в i-узле каталога перечисляют файлы «внутри» каталога.

Каталоги предназначены только для организации файлов. Когда файл «перемещается» из каталога в другой, сам файл не перемещается на диск. Просто запись в одном каталоге i-node удаляется и записывается в другой каталог i-node.

-121--18626-

Поместите в файл следующее:

command1()
{
    if [ "$BASH_COMMAND" != command2 ]
    then
        command_flag=1
    fi
    return 0
}
trap command1 debug
command2()
{
    if [ "$command_flag" ]
    then
        echo ""
    fi
    command_flag=
}
PROMPT_COMMAND=command2

Рекомендуется изменить имена command1 , command2 и команда _ флаг в значения, которые вы вряд ли введете. Затем источник этого файла. (Или просто поместите вышеуказанное в файл .bashrc .)

Команда trap command1 debug вызывает вызов функции command1 при любом вводе команды. Функция command1 устанавливает флаг command _ flag , указывающий на наличие команды. (Функция command1 не вызывается при нажатии Enter .)

PROMPT _ COMMAND = command2 вызывает вызов функции command2 каждый раз, когда оболочка собирается выдать запрос PS1 . Функция command2 проверяет флаг _ команды для проверки ввода команды или просто Enter . При вводе команды будет установлен флаг _ команды и command2 запишет пустую строку на экран. (Если вы выясните, как создать вертикальное пространство, которое является дробью линии, измените команду echo .) Если нажать Enter , команда _ флаг не будет установлен. Затем снимите флажок, чтобы следующая подсказка была выполнена правильно.

Обратите внимание, что вызывается функция command1 когда оболочка запускает функцию command2 ; поэтому command1 необходимо сделать особым случаем (он не считается командой).

-121--61337-

Иногда несколько экранов работают в фоновом режиме.

Они могут быть возобновлены:

screen -r [pid]

Чтобы получить экран, сначала запустите экран -R , затем вы увидите все работающие PID экрана, после этого возобновите экран -r [pid] .

3
27.01.2020, 19:30
screen -r '1234.somescreensession'

Есть экран на:

1234.somescreensession (Прикрепленный)

Нет экрана для возобновления, совпадающего с 1234.somescreensession.

Вот простой способ вернуть этот экранный сеанс.

screen -D -r '1234.somescreensession'
6
27.01.2020, 19:30

Теги

Похожие вопросы