Перемещение уже запущенного процесса на экран
Моя офисная работа обычно видит, что я подключен к Linux через VNC.
Иногда я запускаю удаленную работу на консоли и позже понимаю, что она выполняется намного дольше, чем ожидалось. (Должен был начать это под Screen в первую очередь...)
Я не хочу, чтобы моя рабочая станция работала всю ночь, просто чтобы держать сеанс VNC открытым; Я хотел бы переместить это уже запущенное удаленное задание в сеанс Screen (на удаленном блоке), чтобы я мог выключить рабочую станцию (и восстановить соединение на следующее утро).
Как это можно сделать, если вообще?
3 ответа
Посмотрите на reptyr, который делает именно это. Страница github содержит всю информацию.
reptyr - инструмент для "перепечатывания" программ.
reptyr - это утилита, которая берет существующую работающую программу и присоединяет ее к новому терминалу. Запустил длительный процесс через ssh, но должен уйти и не хочет его прерывать? Просто запустите экран, используйте reptyr, чтобы захватить его, а затем завершите сеанс ssh и идите домой.
ИСПОЛЬЗОВАНИЕ
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
НТН
веселит,