Запуск сеанса экрана с фоновым процессом с использованием -d -m приводит к завершению сеанса экрана при выходе из процесса.
Есть ли способ заставить сеанс экрана оставаться после выхода из процесса, но при этом запускать его без какого-либо взаимодействия с пользователем?
Если ваш процесс может использовать любой из /etc/profile
или /etc/bash.bashrc
и их соответствующие $HOME
файлы, то это может сработать для вас:
screen -d -m bash --init-file background-shell-script
Когда "background-shell-script" завершается, сеанс экрана будет ждать вас в приглашении оболочки, когда вы повторно подключаетесь с screen -r
. Если вы повторно подключитесь до завершения процесса, вы увидите все выходные данные, которые он создает, и получите приглашение оболочки, когда он завершится.
Чтобы получить обычные файлы запуска, добавьте их в начало сценария:
. /etc/profile
# more source statements, if needed
# do your stuff here
Возможно, если вы заключите вызов в сценарий оболочки и вызовете оболочку с опцией, чтобы она продолжала работать после завершения сценария.
Ключевым моментом здесь является то, что вы хотите, чтобы процесс отделился от управляющей оболочки или tty. Самый простой способ сделать это - просто запустить nohup, то есть nohup anyprocess. man nohup для получения дополнительной информации.
Непонятно, почему вы хотите, чтобы сеанс экрана оставался после выхода из процесса. предположительно для захвата вывода, но его можно легко перенаправить.
Единственная причина использовать screen - если вы хотите, чтобы процесс выполнялся, но для управления ему по-прежнему нужен стандартный ввод / вывод. В любом случае рекомендуется избегать этого, если возможно, и просто использовать nohup, а если это длительный процесс, интегрировать его в процесс загрузки машины как длительную службу.