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


222

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

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

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

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


2
и это обман, serverfault.com/questions/49877/… - кажется, это невозможно сделать.
Пол Диксон




Поиск сценария скрининга.
Вашу

Ответы:


217

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

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

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

ИСПОЛЬЗОВАНИЕ

PID рептира

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

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


22
Если, как и я, вы посмотрели ссылку выше и вкратце рассмотрели возможность установки программы из исходных текстов, не бойтесь: это просто apt-getотказ от систем Debian.
mlissner

3
Это прекрасно работает, как я не видел это раньше?
deed02392

3
Это круто! Я бы проголосовал 10 раз, если бы мог! Кроме того, reptyr также доступен в репозиториях RedHat. Просто 'yum install', чтобы получить его.
Марк Дж. Бобак

5
Не работает, за исключением самых тривиальных случаев:Unable to attach. (This most commonly means that 11690 has a suprocesses)
Мердад

2
По крайней мере, в качестве root, вы можете использоватьreptyr -T PID
ChristophK

45

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

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


3
Это очень хорошо сработало для моего случая. reptyr и retty не смогли захватить процесс, но все, что мне было нужно, - это закрыть терминал и оставить процесс для запуска.
STW

10
FYI: после того, как отречешься -ную процесс может быть reptyr -ed внутри экрана .
Адам

1
Это убило мою программу бега :(
Mehrdad

39

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

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

НТН

веселит,


1
Не знал о ретти, спасибо. Тем не менее, для тех длительных работ, которые я имею в виду, я немного неохотно использую инструмент, который называет себя «очень легким испытанием». Я иду с решением Эрла.

1
не вижу ретти в Gentoo
Сергей

не может присоединиться к 4858
Арнольд Роа
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.