Присоединение процесса к терминалу в Linux

Мне открыли файл в vi выполнение в терминале (xterm), если я непосредственно закрываю терминал без первого закрытия файла затем, я вижу vi все еще выполнение в фоновом режиме (ps x). Теперь есть ли любой способ присоединить тот процесс т.е. vi к некоторому другому терминалу так, чтобы я мог продолжить свою работу над файлом. Я также попробовал fd команда, но это перестало работать.

6
задан 13.12.2010, 07:41

4 ответа

Это не возможно “чисто”. Существуют инструменты, такие как экран и tmux, которые создают остаточный виртуальный терминал: можно запустить программу в экране, отсоединить экранную сессию и более позднее повторное прикрепление экранная сессия на другом терминале. Но это требует планирования заранее.

Возможно использовать ptrace для игры с дескрипторами файлов процесса для повторного подключения их к другому терминалу. Это не работает надежно, потому что это могло бы создать несоответствия в структурах данных процесса: некоторые программы не будут возражать, другие откажут. Можно сделать это путем присоединения программы в отладчике и выпустить правильную последовательность системных вызовов (по крайней мере, open, dup и close для каждого стандартного входа, стандартного вывода и стандартной погрешности). Существует несколько существующих инструментов, которые могут сделать это, например, neercs и крысиный.

См. также, Как я могу приостановить рабочий процесс по ssh, отрицать его, связать его к новой экранной оболочке и не приостановить его?, Сценарий Представления По SSH?, Могу я nohup/screen уже запущенный процесс?, команда Resume, работающая на отброшенной сессии SSH.

3
ответ дан 07.12.2019, 16:26

Можно попробовать экран GNU. Это сделано с этой целью.

Экран является полноэкранным менеджером окон, который мультиплексирует физический терминал между несколькими процессами, обычно интерактивными оболочками

1
ответ дан 07.12.2019, 16:26

Можно использовать GDB для подключения рабочего процесса к терминалу.

Вот распространение описания через несколько ответов на вопрос (особенно посмотрите тот Mirek):

https://stackoverflow.com/questions/593724/redirect-stderr-stdout-of-a-process-after-its-been-started-using-command-line

0
ответ дан 07.12.2019, 16:26

Никакой способ сделать это. Просто уничтожьте отдельный процесс. Если Вы хотите сделать это намеренно, взглянуть на 'экранную' команду. Это не сохранит Вас, если Ваша базовая оболочка умрет все же.

-1
ответ дан 07.12.2019, 16:26

Теги

Похожие вопросы