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