Перемещение уже запущенного процесса на экран

Моя офисная работа обычно видит, что я подключен к 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

НТН

веселит,

Другие вопросы по тегам