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