Держать окно экрана GNU открытым после завершения программы?

Руководство по экрану GNU гласит:

Когда программа завершается, screen (по умолчанию) убивает окно, которое содержало это.

(per default) предполагает, что вы можете изменить эту опцию, чтобы завершающая программа не убивала окно, в котором она находится. Как мне изменить это поведение?

3 ответа

Решение

Попробуй использовать zombie или же defzombie, Я использую следующие настройки.

# don't remove windows from the window list as soon as window process exits.
zombie kr #  k: destory window, r: resurrect window

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 в окне экрана.

Я бы предложил сначала запустить экран с "оболочкой" и запустить вашу команду, чтобы после ее завершения вы вернулись в свою оболочку внутри экрана и могли видеть результаты своей команды. (Вы можете отключить функцию автозапуска оболочки, чтобы через некоторое время она не закрылась)

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

Другие вопросы по тегам