7

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

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

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

3 ответа3

10

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

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

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

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

0

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

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .