23

Иногда я забываю запустить программу во время сеанса экрана и не могу остановить ее в середине, и я знаю, что это займет много времени.

Есть ли способ проверить уже запущенный процесс, не перезапуская его?

3 ответа3

12

Нашел этот ответ на serverfault от графа:

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

И этот от того же вопроса от Роба Уэллса:

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

7

Найден дубликат в ServerFault.

Другое решение, не найденное в этом посте, использует retty после запуска сеанса экрана

5

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

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

программы.

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

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

PID рептира

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

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

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .