На работе в офисе я обычно подключаюсь к Linux через VNC.
Иногда я запускаю удаленное задание на консоли и позже понимаю, что оно выполняется намного дольше, чем ожидалось. (В первую очередь надо было запустить его под экраном ...)
Я не хочу оставлять свою рабочую станцию работающей на ночь только для того, чтобы сеанс VNC оставался открытым; Я хотел бы переместить это уже запущенное удаленное задание в сеанс Screen (на удаленном компьютере), чтобы я мог выключить рабочую станцию (и повторно подключиться на следующее утро).
Как это можно сделать, если вообще?
Посмотри на рептирь, что и делает. На странице github есть вся информация.
reptyr - инструмент для "перепрограммирования" программ.
reptyr - это утилита для подключения существующей запущенной программы к новому терминалу. Запустили длительный процесс по ssh, но нужно уйти и не хотите его прерывать? Просто запустите экран, используйте reptyr, чтобы захватить его, а затем завершите сеанс ssh и отправляйтесь домой.
ИСПОЛЬЗОВАНИЕ
reptyr PID
"reptyr PID" захватит процесс с идентификатором PID и присоединит его к вашему текущему терминалу.
После присоединения процесс будет принимать входные данные и записывать выходные данные в новый терминал, включая ^ C и ^ Z. (К сожалению, если вы это сделаете в фоновом режиме, вам все равно придется запускать "bg" или "fg" в старом терминале. Это, вероятно, невозможно исправить разумным способом без исправления вашей оболочки.)
Вы не можете сделать это легко. Я бы посоветовал сделать привычкой запускать экран как первое, что вы делаете после открытия консоли.
Однако для решения вашей реальной проблемы есть еще одна вещь, которую вы можете попробовать: после запуска вашего задания с терминала, выполните его в фоновом режиме, набрав ctrl-z, а затем bg
. После этого отсоедините задание от его родительской оболочки; в bash вы бы сделали disown -h %<jobid>
. После этого вы можете безопасно закрыть терминал, и работа продолжится.
Если вы используете Linux, как насчет использования retty внутри только что запущенного экранного процесса?
$ screen -S my_process
$ retty $(pgrep my_process)
/redraw
HTH
ура,