Заменить процесс экрана с экрана

Когда он запускается, я настроил exec screen оболочки на exec screen , если он уже не работает в сеансе экрана. Таким образом, в TTY дерево процессов будет выглядеть примерно так:

 login───screen───screen───zsh. 

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

 login───bash, 

без необходимости выходить из системы и вносить временные изменения в мой .zshrc или использовать chsh .

2 Solutions collect form web for “Заменить процесс экрана с экрана”

Вы можете запустить сеанс экрана в вас .zshrc без exec , просто screen . exec заменяет текущий процесс новым. Таким образом, вы никогда не вернетесь к исходному процессу, потому что его больше не существует.

Если он был запущен без exec , pstree тогда будет выглядеть примерно так (я добавил -p в pstree, чтобы показать PID для понимания):

 |-login(857)---zsh(31597)---screen(1105)---screen(1108)---zsh(1109)-+-pstree(1209) $ echo $$ 1109 

Теперь мы находимся в дочернем процессе screen , поэтому внутри screen . Когда вы теперь хотите что-то выполнить за пределами screen закройте screen или отсоедините его с помощью ctrla d . Снова pstree :

 |-screen(1108)---zsh(1109) |-login(857)---zsh(31597)-+-pstree(1481) $ echo $$ 31597 

Первая строка – это отсоединенный screen с внутренней оболочкой, второй – текущей рабочей оболочкой (где мы сейчас). Как вы видите, переменная $$ содержит PID первого процесса zsh .

Чтобы вернуться на экран, просто позвоните:

 screen -r 

Теперь он выглядит так же, как в первом сценарии:

 |-screen(1108)---zsh(1109)-+-pstree(2118) |-login(857)---zsh(31597)---screen(2112) $ echo $$ 1109 

Обратите внимание на PID: я вернулся в оболочку, которая является дочерним элементом screen (1108). Этот screen процесс (1108) больше не является дочерним процессом исходного экрана (1105), поскольку этот процесс больше не существует. Вот почему 1108 получил репарацию (его родитель теперь init с PID 1). В тот момент, когда я вызвал screen -r для повторного подключения назад, был создан новый экранный процесс с новым PID (2112). Эти screen говорят о простых сокетах unix или через именованные каналы друг с другом.

Следующий метод может быть немного сложным, но может быть решением вашего вопроса.

Вы можете создать дубликат пользователя, отредактировав файл / etc / passwd и дублировать строку своего пользователя. Измените имя пользователя (первое поле). Установите пароль для своего «нового» пользователя с помощью passwd newuser . Наконец, измените свой .zshrc и замените exec screen на проверку имени пользователя:

 if [ "`id -un`" != "newuser" ] then exec screen fi 

Если вы хотите иметь сеанс без exec screen вы можете войти в систему с альтернативным пользователем, который на самом деле совпадает с вашим обычным пользователем.

Возможно, есть лучшие альтернативы тому, чего вы пытаетесь достичь, но это может помочь вам …

  • Заполнение имени файла zsh без учета регистра
  • / etc / paths в OS X и других Unices
  • Почему диапазон расширения скобок использует две точки вместо трех (эллипсис)?
  • zsh: сделать остановку ALT + BACKSPACE у не буквенно-цифровых символов
  • Как подготовить файлы для rsync для файловой системы, не учитывающей регистр?
  • Как использовать `which` в команде aliased?
  • тема oh-my-zsh, похоже, не обновляется, если я не запустил zsh
  • zsh продолжает забывать PATH vars
  • Предотвращение использования zsh от использования псевдонимов в CWD (подсказка)
  • Есть ли хороший способ установить локальные переменные среды каталога / проекта?
  • Постоянный каталог стеков через сессии в zsh
  • zsh: команда map для массива
  • Interesting Posts

    Команда grep не поддерживает начало «^» и «$» конца привязки строк, когда она с -Pz

    Почему wget не работает через туннель ssh? Что делает прокси-сервер для предотвращения использования ssh-client?

    Проверка почты и запуск скрипта без загрузки

    Shell – печать только определенных строк с вывода

    Как автозаполнение проигнорировать конкретное завершение

    Идентификаторы исходных IP-адресов всех входящих пакетов

    как я могу переименовать несколько файлов, удалив символ или строку?

    Задание ресурсов X для XTerm

    написать существующие конфигурации xfce4 на диск

    Как удалить символические ссылки, указывающие на файлы в определенной папке?

    Система висит, когда заканчивается память

    ext4 используемое пространство (не -m опция, не удаленные файлы)

    Как переопределить опцию в команде aliased?

    arch linux, "невозможно создать файловые системы"

    Экспортировать несколько опций в $ GREP_OPTIONS

    Linux и Unix - лучшая ОС в мире.