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

Когда он запускается, я настроил 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? Как?
  • Cygwin: компакт-диск для Windows легко
  • Как работает вилочная бомба?
  • Как извлечь только «базовое имя» родительского каталога в оболочке?
  • Ярлык .zshrc работает на Arch, но не на Ubuntu
  • цвета не расширяются в zsh print -P
  • Развернуть меньше, чем знак при использовании multios и brace expand
  • Измените zsh-завершение, чтобы выполнить доработки над подсказкой
  • Правильное место для установки командной строки (PS1) при использовании sh / bash / zsh вместе
  • Настроить tmux для использования zsh
  • find -exec on zsh: эхо работает, как и ожидалось, печать не
  • Interesting Posts

    Где мой загрузочный каталог?

    Что именно произойдет, если эта команда будет запущена?

    Kali Linux Rolling Alfa NHA Wireless Ошибка -22, Кали в виртуальной коробке (хост Кали) Режим реального времени

    Ruby и Git отказываются обновлять. (Mac)

    как создать kernel-tools-4.2.xx.rpm и kernel-ltools-libs-4.2.xx.rpm

    Есть ли способ передать переменную из выражения awk в функцию bash в качестве аргумента?

    объединить громкость luks через pam с gdm

    Как добавить себя к sudoers, когда у меня нет доступа root к моей машине debian?

    80-net-setup-link больше не работает, когда я понизил systemd

    Сортировка файла на основе средней части

    Как я могу заставить bash gearman использовать аргументы в качестве stdin?

    VGA и DVI, установите консоль ядра по умолчанию на один

    Могу ли я использовать iptables для пересылки между интерфейсами без установки / proc / sys / net / ipv4 / ip_forward?

    Предотвратить запуск MATE Caja Desktop при запуске i3

    Крышка закрыта автоматически не обнаружена на thinkpad T430 с debian 9

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