Насколько я понимаю, все процессы Linux на самом деле являются файлами
Вы не должны Не воспринимайте метафору слишком буквально. К процессам Linux действительно можно получить доступ через псевдофайловую систему для целей отладки, мониторинга и анализа, но процессы - это нечто большее, чем просто эти файлы и их «копирование» с файловой системы исходного хоста
/ proc
на целевуюФайловая система] / proc
обречена.Можно ли скопировать запущенный процесс между машинами?
Одна из серьезных проблем, связанных с перемещением запущенного процесса между хостами, заключается в том, как обрабатывать дескрипторы открытых файлов, которые использует этот процесс.Если процесс читает или записывает файл, этот самый файл (или точный клон) должен быть доступен на целевом хосте. Дескрипторы файлов, относящиеся к сокетам, будет сложно обработать, поскольку IP-адрес, к которому они привязаны, скорее всего, будет изменяться с одного хоста на другой. Процессы, разделяющие сегменты памяти с другими, перестанут делать это после миграции. Конфликты PID также могут произойти, если у запущенного процесса такой же pid, что и у входящего, один из них нужно будет изменить. Отношения между родителями и детьми будут потеряны, и я только что обозначил возможные проблемы.
Несмотря на эти проблемы, существуют технические решения, обеспечивающие функцию , называемую « Контрольная точка приложения », например DMTCP и CRIU . Это похоже на то, что используется с гипервизорами, такими как VMWare, VirtualBox, Oracle VM и другими, когда они выполняют живую миграцию виртуальных машин / телепортацию . С виртуальными машинами задача на самом деле «проще», поскольку перемещается вся ОС, включая дескрипторы файлов, файловые системы, память, сеть и другие устройства и т. Д.
my backspace key isn't being detected as a '\b'. What can I do?
Какие управляющие или управляющие последовательности используются для и #x232B;(backspace )и & #x2326;(удалить )клавиши генерируются по-разному.
На терминалах, которые пытаются быть похожими на ТН DEC:
Но не каждый терминал (эмулятор )даже пытается быть похожим на DEC VT, не говоря уже о реализации механизма DECBKM. Вы не можете просто запрограммировать последовательности ввода с клавиатуры и ожидать, что они будут работать при любых обстоятельствах.
Ваша программа должна работать следующим образом. :Она должна взять тип терминала из переменной окружения TERM
, получить соответствующую запись из базы данныхterminfo
(илиtermcap
)и найти там две способности:
kbs
(kb
)— последовательность, отправляемая и #x232B; клавиша kdch1
(kD
)— последовательность, отправленная и #x2326; клавиша Он должен сопоставлять эти строки с входными данными, которые он считывает.Чтобы отличить фактические последовательности управления от простых нажатий Esc , ваша программа должна быть более сложной, чем цикл fgetc()
. Вы должны установить не -канонический режим и установить (короткий )тайм-аут чтения. Только если read()
возвращает всю строку в течение периода ожидания, она должна рассматриваться как последовательность управления вводом.
Обратите внимание, что специальные символы, установленные с помощью stty
, в значительной степени являются отвлекающим маневром. Они не применяются в не-каноническом режиме и в любом случае влияют только на линейную дисциплину . Поведение терминала полностью определяется тем, как он отображает события аппаратных клавиш на управляющие последовательности, которые он отправляет «по сети» в линейную дисциплину. Терминалы, как было сказано ранее, могут делать это различными способами, от использования загружаемых карт между кодами клавиш и управляющими последовательностями (, встроенными во FreeBSD -в эмуляторе терминала ядра ), до ресурсов X.