it-swarm.xyz

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

Моя офисная работа обычно видит, что я подключен к Linux через VNC.

Иногда я запускаю удаленную работу на консоли и позже понимаю, что она выполняется намного дольше, чем ожидалось. (Должен был начать это под Screen в первую очередь ...)

Я не хочу, чтобы моя рабочая станция работала всю ночь, просто чтобы держать сеанс VNC открытым; Я хотел бы переместить это уже запущенное удаленное задание в сеанс Screen (на удаленном блоке), чтобы я мог выключить рабочую станцию ​​(и восстановить соединение на следующее утро).

Как это можно сделать, если вообще?

232
DevSolar

Посмотрите на reptyr , который делает именно это. Страница github содержит всю информацию.

reptyr - инструмент для перепечатывания программ.

reptyr - это утилита, которая берет существующую работающую программу и присоединяет ее к новому терминалу. Запустил длительный процесс через ssh, но должен уйти и не хочет его прерывать? Просто запустите экран, используйте reptyr, чтобы захватить его, а затем завершите сеанс ssh и идите домой.

ПРИМЕНЕНИЕ

pID рептира

"reptyr PID" захватит процесс с идентификатором PID и подключит его к вашему текущему терминалу.

После подключения процесс примет входные данные и запишет их на новый терминал, включая ^ C и ^ Z. (К сожалению, если вы справитесь с этим, вам все равно придется запустить "bg" или "fg" в старом терминале. Вероятно, это невозможно исправить разумным способом, не исправляя свой Shell.)

229
DaveJohnston

Вы не можете сделать это легко. Я бы посоветовал сделать привычку запускать экран первым делом после открытия консоли.

Тем не менее, для вашей реальной проблемы есть еще одна вещь, которую вы можете попробовать: после запуска задания из терминала, создайте фоновый режим, набрав ctrl-z, а затем bg. После этого отсоедините работу от родительской оболочки; в bash вы бы сделали disown -h %<jobid>. После этого вы можете безопасно закрыть терминал, и работа продолжится.

46
earl

Когда вы используете Linux, как насчет использования retty во вновь запущенном процессе экрана?

$ screen -S my_process
$ retty $(pgrep my_process)
/redraw

НТН

веселит,

39
Rob Wells