Назад | Перейти на главную страницу

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

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

ура,