Автор исследовал ошибку в работе PanamaKVM — экспериментального монитора виртуальных машин на Java. При запуске Linux внутри VM нажатие комбинации Ctrl+C приводило к выключению всей виртуальной машины, а не к завершению гостевого процесса.
Причиной сбоя стали настройки терминала хостовой ОС. Механизм обработки ввода (line discipline) перехватывал символ 0x03 и отправлял сигнал SIGINT группе процессов, в которую входила JVM. Отключение флага -isig на хосте позволило передавать символ внутрь виртуальной машины.
После изменения настроек символ стал доходить до гостевой системы, однако команда sleep не прерывалась. Автор отследил путь сигнала через виртуальный UART и вызовы KVM_IRQ_LINE, подтвердив, что байт успешно доставляется в ядро гостевой ОС и обрабатывается подсистемой TTY.
Диагностика показала, что проблема не связана с уровнем виртуализации. Даже при отправке SIGINT напрямую группе процессов внутри гостя команда продолжала выполняться. Автор пришел к выводу, что причина кроется в состоянии самого процесса, например, в блокировке или игнорировании сигналов, что проверяется через /proc/[pid]/status.




