Как разрешить возврат в небуферизованном / неканоническом режиме?

Насколько я понимаю, все процессы Linux на самом деле являются файлами

Вы не должны Не воспринимайте метафору слишком буквально. К процессам Linux действительно можно получить доступ через псевдофайловую систему для целей отладки, мониторинга и анализа, но процессы - это нечто большее, чем просто эти файлы и их «копирование» с файловой системы исходного хоста / proc на целевую Файловая система] / proc обречена.

Можно ли скопировать запущенный процесс между машинами?

Одна из серьезных проблем, связанных с перемещением запущенного процесса между хостами, заключается в том, как обрабатывать дескрипторы открытых файлов, которые использует этот процесс.Если процесс читает или записывает файл, этот самый файл (или точный клон) должен быть доступен на целевом хосте. Дескрипторы файлов, относящиеся к сокетам, будет сложно обработать, поскольку IP-адрес, к которому они привязаны, скорее всего, будет изменяться с одного хоста на другой. Процессы, разделяющие сегменты памяти с другими, перестанут делать это после миграции. Конфликты PID также могут произойти, если у запущенного процесса такой же pid, что и у входящего, один из них нужно будет изменить. Отношения между родителями и детьми будут потеряны, и я только что обозначил возможные проблемы.

Несмотря на эти проблемы, существуют технические решения, обеспечивающие функцию , называемую « Контрольная точка приложения », например DMTCP и CRIU . Это похоже на то, что используется с гипервизорами, такими как VMWare, VirtualBox, Oracle VM и другими, когда они выполняют живую миграцию виртуальных машин / телепортацию . С виртуальными машинами задача на самом деле «проще», поскольку перемещается вся ОС, включая дескрипторы файлов, файловые системы, память, сеть и другие устройства и т. Д.

1
30.07.2017, 21:50
1 ответ

my backspace key isn't being detected as a '\b'. What can I do?

Какие управляющие или управляющие последовательности используются для и #x232B;(backspace )и & #x2326;(удалить )клавиши генерируются по-разному.

На терминалах, которые пытаются быть похожими на ТН DEC:

  • и #x2326; Клавиша генерирует управляющую последовательность DECFNK.
  • Поведение и #x232B; можно переключать между символами ASCII BS и DEL, при этом на терминал передается управляющая последовательность с именем DECBKM.

Но не каждый терминал (эмулятор )даже пытается быть похожим на DEC VT, не говоря уже о реализации механизма DECBKM. Вы не можете просто запрограммировать последовательности ввода с клавиатуры и ожидать, что они будут работать при любых обстоятельствах.

Ваша программа должна работать следующим образом. :Она должна взять тип терминала из переменной окружения TERM, получить соответствующую запись из базы данныхterminfo(илиtermcap)и найти там две способности:

  • kbs(kb)— последовательность, отправляемая и #x232B; клавиша
  • kdch1(kD)— последовательность, отправленная и #x2326; клавиша

Он должен сопоставлять эти строки с входными данными, которые он считывает.Чтобы отличить фактические последовательности управления от простых нажатий Esc , ваша программа должна быть более сложной, чем цикл fgetc(). Вы должны установить не -канонический режим и установить (короткий )тайм-аут чтения. Только если read()возвращает всю строку в течение периода ожидания, она должна рассматриваться как последовательность управления вводом.

Обратите внимание, что специальные символы, установленные с помощью stty, в значительной степени являются отвлекающим маневром. Они не применяются в не-каноническом режиме и в любом случае влияют только на линейную дисциплину . Поведение терминала полностью определяется тем, как он отображает события аппаратных клавиш на управляющие последовательности, которые он отправляет «по сети» в линейную дисциплину. Терминалы, как было сказано ранее, могут делать это различными способами, от использования загружаемых карт между кодами клавиш и управляющими последовательностями (, встроенными во FreeBSD -в эмуляторе терминала ядра ), до ресурсов X.

Дополнительная литература

1
27.01.2020, 23:24

Теги

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