Как графическое приложение запущено от сессии удара, подключенной к той сессии удара?

При нажатии клавиши на клавиатуре она отправляет цифровой код на компьютер, названный скэн-кодом. Скэн-код говорит компьютер, какая клавиша была нажата; например, на типичной американской клавиатуре, ключ отправляет скэн-код 30 при нажатии его (и 158 при выпуске его). Драйвер клавиатуры сообщает об этих кодах непосредственно приложениям, когда клавиатура находится в режиме без предварительной обработки (“сырые данные” означают необработанный, непосредственно-клавиатура). Несколько программ используют режим без предварительной обработки и делают их собственную обработку клавиатуры; X-сервер является самым видным.

Большинство программ ожидает, что при нажатии клавиши программа читает символ a (ASCII 97) и это, когда Вы нажимаете Shift+A чтения программы A (ASCII 65), и когда Вы нажимаете Ctrl+A программа, читает Ctrl+A символ (ASCII 1). Ключи, которые не имеют связанных символов, отправляют escape-последовательности, например. \e[A для Левого, где \e символ ESC (ASCII 27). Драйвер клавиатуры выполняет этот перевод, когда клавиатура находится в режиме ASCII, также названный режимом XLATE (короткий для “переводят”). Режим XLATE позволяет приложениям сделать ввод символов, за счет не наличия доступа к таким нюансам как “Клавиша сдвига влево, нажатая” или Ctrl+Shift+A в отличие от Ctrl+A.

kbd_mode позволяет Вам переключиться между режимами и показывает текущий режим, если Вы вызываете его без какого-либо аргумента.

Волшебные сочетания клавиш SysRq предназначены для восстановления с различных противных ситуаций. Одно из сочетаний клавиш Alt+SysRq+K закрыть все программы на текущей виртуальной консоли; если та программа поместит клавиатуру в режим без предварительной обработки, то Вы не сможете ввести при приглашении ко входу в систему (который будет часто появляться, в зависимости от Вашей конфигурации системы). Нажатие Alt+SysRq+R восстанавливает обычное (вне X) режим ASCII, где можно ввести символы.

7
11.11.2010, 17:21
2 ответа

Приложение соединено двумя способами: колотить, и терминалу.

Соединение с терминалом - то, что стандартные потоки (stdin, stdout и stderr) приложения подключены к терминалу. Типичные приложения GUI не используют stdin или stdout, но они могли бы испустить сообщения об ошибках к stderr.

Соединение с оболочкой - это, если Вы запустили приложение с foo &, это остается известным оболочке, поскольку задание, как объяснено в Различии между nohup, отрицает и и. При закрытии терминала оболочка получает a SIGHUP, который это распространяет к его заданиям. Когда Вы вводите exit в оболочке это отрицает задания заранее (это настраивается в некоторой степени).

Можно разъединить соединение оболочки с disown встроенный. Вы не можете разъединить клеммное соединение, по крайней мере, не без закулисных методов (использующий отладчик), который мог разрушить программу.

9
27.01.2020, 20:16

Ваша оболочка запускает эти программы как дочерние процессы. При выполнении pstree, Вы видите эти отношения. Я не знаю, можно ли управлять им.

2
27.01.2020, 20:16

Теги

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