Переместить программу, запущенную на экране GNU, на другой терминал
Я хочу прекратить экземпляр GNU screen
сохраняя процесс внутри него.
Поэтому я открыл свою обычную программу-эмулятор терминала и запустил экран. Затем я использовал этот экземпляр screen
выполнить ./script_x.sh
, Теперь по какой-то причине я хочу прекратить использование screen
тем не мение script_x.sh
еще не выполнил свою задачу, и я не желаю лишаться своего прогресса.
Могу ли я сохранить активный процесс живым, чтобы продолжить работу над ним в моем обычном эмуляторе терминала?
3 ответа
TLDR: Практический ответ: Нет.
Более длинный ответ:
В теории вы можете. Если вы начали что-то вроде nohup myprog &
изнутри экрана, то он будет продолжать работать. Он будет игнорировать сигнал зависания и не будет иметь никакого входа, но в теории вы могли бы продолжить работу с ним.
На практике это не так. Таким образом, если вы не хотите присоединить отладчик к запущенному процессу, переписать его файловые дескрипторы и убедиться, что процесс обрабатывает сигналы -1, когда вы закрываете экран... тогда ответ - нет.
Если вы готовы сделать это, у меня дома есть закладка, указывающая на [SU], где кто-то сделал именно это. Сохранено для удивительности, а не потому, что это легко и тривиально сделать.
Вы можете попробовать использовать reptyr
подключить уже запущенное приложение к другому терминалу. У него есть некоторые проблемы с отправкой процесса в фоновом режиме.
Я только что проверил это (начало htop
внутри screen
, reptyr
это в другой терминал, убей screen
), и это, кажется, работает хорошо. Тем не менее, это действительно хакерское решение, так что никаких гарантий.
Да (если "убийство" на самом деле не убийство), это именно то, для чего предназначен экран. Вы должны проверить руководство и попробовать, какой из них соответствует вашим потребностям:
C-a d
C-a C-d (detach) Detach screen from this terminal.
C-a D D (pow_detach) Detach and logout.
Тогда вам понадобятся параметры командной строки -D/-d -R/-r экрана, в зависимости от вашего выбора.