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

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

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

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

 login───bash, 

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

  • Почему $ COLUMNS не отображается ни в env, ни в наборе? (по zsh)
  • Символы имени действительной функции Shell
  • Показать путь из корня проекта в ZSH Prompt
  • Включить плагин для Oh my Zsh в Docker
  • псевдоним? не работает в zsh
  • Расширение с числами в человекообразном формате
  • Сортировка массива на основе подстроки каждого элемента
  • zsh завершение: меню и однозначный префикс с одной вкладкой?
  • 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 вы можете войти в систему с альтернативным пользователем, который на самом деле совпадает с вашим обычным пользователем.

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

    Interesting Posts

    bash: передача нескольких пробелов, содержащих имена файлов

    Как изменить стандартный файловый менеджер рабочего стола Cinnamon?

    Как вызвать процесс с определенным двоичным кодом java и всеми процессами, вызванными этим процессом?

    Найти файлы gif / jpeg с расширением png и преобразовать в png

    Указание порта с произвольным мониторингом с autossh

    Каков самый простой способ клонирования встроенной SD-карты Linux?

    Как найти общий размер файла, сгруппированный по расширению

    hpux: странная вещь dsf

    Как остановить Vim от изменения моего каталога при выполнении make-файла?

    Переименовать команду с несуществующим целевым каталогом

    sed: проблема при замене строки с помощью шаблона

    Как объединить два файла с общим ключом в awk?

    Как определить, находится ли окно в фокусе?

    Ricoh Aficio SP 100su E

    возможно ли подключиться на моем сервере через SSH, а сервер подключен к VPN?

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