Кто решает, какое приложение получает сигнал с клавиатуры?

Есть число доступных решений для отладки ядра; Вот пара, которую я использовал:

Оба они могут привести к зависанию ЦП при запуске эмулируемой системы, что позволяет отладить начальную загрузку. При использовании в качестве целей для gdb они также поддерживают присоединение исходного кода, чтобы вы могли следовать коду C (или теоретически чему-либо gdb ).

16
10.03.2017, 11:58
1 ответ

Нажатие C при нажатой Ctrl отправляет нажатие клавиши, за которым следует событие X11, в эмулятор терминала.

После этого события (обычно при нажатии клавиши) эмулятор терминала записывает байт 0x3 ( ^ C ) в свой файловый дескриптор на стороне ведущего устройства псевдотерминала.

Если параметр isig termios устройства включен и параметр intr установлен на этот байт 0x3, то ядро ​​отправляет сигнал SIGINT всем членам Группа процессов переднего плана оконечного устройства (еще один атрибут, хранящийся в устройстве pty).В этом случае байт 0x3 не будет доступен для чтения на ведомой стороне pty.

Обычно это интерактивные оболочки, которые создают группы процессов (с помощью setpgid () ) для заданий оболочки и решают, какую из них поместить на передний план (с помощью tcsetpgrp () , чтобы установить этот атрибут. устройства pty) или нет.

Например, когда вы запускаете по приглашению интерактивной оболочки:

foo | bar

Оболочка запускает новую группу процессов с двумя процессами (в которых она выполняет foo и bar после подключив их стандартный ввод / вывод с помощью трубы) и помещает эту группу на передний план. Оба процесса получат SIGINT, если вы нажмете Ctrl-C.

В:

foo | bar &

То же самое, но группа процессов не выводится на передний план (и оболочка также не ждет этого, поэтому вы можете вводить другие команды). Эти процессы не получат SIGINT при нажатии Ctrl-C, но могут быть приостановлены, если они попытаются прочитать с устройства tty.

Дополнительная литература: Каковы обязанности каждого компонента псевдотерминала (PTY) (программное обеспечение, ведущая сторона, ведомая сторона)?

34
27.01.2020, 19:48

Теги

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