Окно screen
выходит при выходе из программы, в которой оно запущено. Это связано с тем, что экран сам по себе не является оболочкой, поэтому после выхода из программы больше ничего нельзя сделать с помощью окна. Вы не можете запустить новую программу, так как в этом терминальном сеансе не осталось ничего, что могло бы запустить программу.
Вновь созданное окно экрана по умолчанию запустит bash (или какую-либо назначенную вами оболочку). Поскольку bash - это оболочка, вы можете запускать из нее любое количество программ, а когда они выходят, они возвращаются в bash. Затем можно запустить другую программу. Так что окно, в котором запущен bash, будет вести себя так, как вы описываете. Окно закроется только тогда, когда выйдет сам bash.
Обратите внимание, что это такое же поведение, как и у любого терминального сеанса: после завершения последней программы терминальный сеанс заканчивается (на обычном терминале этот сеанс затем повторно вызывается, если для него установлено значение init, а затем появляется экран входа).
Это немного странно, но обычно, когда вы запускаете экран командой, команда завершения завершает окно. Однако, если вы также запустите bash с помощью команды с параметром -c
, bash также завершит работу после выхода из команды.
Поэтому, если мы хотим, чтобы bash запускал команду, но оставался в стороне после ее завершения, нам нужно запустить команду как часть процесса инициализации bash.
Например, если вы создаете новый файл "startserver1", содержащий команды, необходимые для запуска сервера:
#start the server
ls -la
Затем запустите экран с помощью bash, инициализируя его файлом startserver1:
screen bash --init-file startserver1
Это вызовет экран, запуск bash, инициализацию bash с помощью сценария запуска вашего сервера. После завершения работы сервера вы остаетесь в сеансе bash в окне экрана.