Переміщення вже запущеного процесу на екран


222

Моя офісна робота звичайно бачить мене підключеним до скриньки Linux через VNC.

Іноді я запускаю віддалену роботу на консолі і згодом розумію, що вона працює набагато довше, ніж очікувалося. (Потрібно почати цю програму вперше під екраном ...)

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

Як це можна зробити, якщо взагалі?


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




Шукайте скрипт screenify.
Вашу

Відповіді:


217

Погляньте на рептирій , який робить саме це. На сторінці github є вся інформація.

reptyr - Інструмент для "перенастроювання" програм.

reptyr - це утиліта для прийняття наявної запущеної програми та приєднання її до нового терміналу. Почався тривалий процес над ssh, але доведеться вийти з нього і не хочете його переривати? Просто запустіть екран, використовуйте рептирій, щоб схопити його, а потім вбити ssh сеанс і повернутися додому.

ВИКОРИСТАННЯ

рептирій PID

"reptyr PID" захопить процес із ідентифікатором PID та додасть його до поточного терміналу.

Після приєднання процес буде приймати вхід з і записувати вихід у новий термінал, включаючи ^ C і ^ Z. (На жаль, якщо ви працюєте з фоном, вам все одно доведеться запускати "bg" або "fg" у старому терміналі. Це, ймовірно, неможливо виправити розумним чином, не виправляючи оболонку.)


22
Якщо ви, як і я, переглянули посилання вище і коротко подумали про встановлення програми з джерела, прийміть до уваги: ​​це просто apt-getдалеко від систем Debian.
mlissner

3
Це чудово працює, як я цього раніше не бачив?
deed02392

3
Це круто! Я би схвилював це 10 разів, якби міг! Рептир також доступний і в репортах RedHat. Просто "встановіть", щоб отримати його.
Марк Дж. Бобак

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

2
Принаймні як корінь ви можете використовуватиreptyr -T PID
ChristophK

45

Ви не можете цього легко зробити. Я б запропонував зробити звичку запускати екран як перше, що ви робите після відкриття консолі.

Однак для вашої реальної проблеми ви можете спробувати ще одну справу: після запуску завдання з терміналу виберіть її, ввівши ctrl-z, а потім bg. Після цього від'єднайте роботу від батьківської оболонки; в баш ти б робив disown -h %<jobid>. Після цього ви можете безпечно закрити термінал, і робота продовжить роботу.


3
Це дуже добре спрацювало для моєї справи. і reptyr, і retty не змогли схопити процес, але все, що мені було потрібно, - це змогти закрити термінал і залишити процес на запуск.
STW

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

1
Це вбило мою програму запуску :(
Мехрдад

39

Оскільки ви використовуєте Linux, що з використанням retty всередині нещодавно запущеного екранного процесу?

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

HTH

ура,


1
Спасибі не знав. Однак для тих тривалих завдань, які я маю на увазі, я трохи неохоче використовую інструмент, який називає себе "дуже легко перевіреним". Я йду з рішенням графа.

1
не бачити ретти в Gentoo
Сергій

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