У меня есть файл, открытый в vi
работающий в терминале (xterm
), если я непосредственно закрываю терминал, не закрыв сначала файл, я вижу, что vi
все еще работает в фоновом режиме (ps x
). Есть ли способ присоединить этот процесс, например, vi, к другому терминалу, чтобы я мог продолжить работу над файлом. Я также попробовал команду fd
но она не удалась.
4 ответа
Это невозможно "чисто". Существуют такие инструменты, как screen и tmux, которые создают постоянный виртуальный терминал: вы можете запустить свою программу внутри экрана, отключить сеанс экрана, а затем снова присоединить сеанс экрана к другому терминалу. Но это требует планирования заранее.
Можно использовать ptrace для работы с файловыми дескрипторами процесса, чтобы повторно подключить их к другому терминалу. Это не работает надежно, потому что это может создать несоответствия в структурах данных процесса: некоторые программы не будут возражать, другие будут аварийно завершать работу. Вы можете сделать это, подключив программу в отладчике и выполнив правильную последовательность системных вызовов (по крайней мере, open
, dup
и close
для каждого из стандартного ввода, стандартного вывода и стандартной ошибки). Есть несколько существующих инструментов, которые могут сделать это, например, neercs и retty.
См. Также Как я могу приостановить запущенный процесс через ssh, отречься от него, связать его с новой оболочкой экрана и отменить его?, Просмотреть сценарий через SSH?, Могу ли я nohup/screen уже запущенный процесс?, Возобновить выполнение команды в отброшенном сеансе SSH.
Вы можете попробовать экран GNU. Это сделано для этого.
Screen - это полноэкранный оконный менеджер, который мультиплексирует физический терминал между несколькими процессами, обычно это интерактивные оболочки.
Вы можете использовать GDB для присоединения запущенного процесса к терминалу.
Вот описание, разбросанное по нескольким ответам на вопрос (особенно см. Ответ Мирека):
Нет способа сделать это. Просто убей оторванный процесс. Если вы хотите сделать это намеренно, взгляните на команду «screen». Это не спасет вас, если ваша основная оболочка умрет.