Процесс игнорирует сигналы + Концепция терминала/оболочки

На уровне VFS все файлы являются виртуальными (на самом деле это было изобретено инженерами SunOS для связывания UFS (дисковой -на основе )и NFS (сетевой -на основе )файловой системы ). ].

Каждое открытое fileимеет таблицу функций f_op, которые обеспечивают реализацию общих подпрограмм (некоторые из них могут быть общими )и каждый inodeимеет прикрепленный address_spaceобъект, который также имеет таблицу функций. C-функции (a_ops), содержащие необходимые реализации. Последовательность такова:

  1. sys_read():Приложение инициирует чтение файла с помощью системного вызова
  2. Вызов передается на верхний уровень стека VFS(vfs_read())
  3. Вызов передается драйверу файловой системы с использованием file->f_op->read(), do_sync_read()или new_sync_read()
  4. .
  5. Если файл открывается в режиме прямого ввода-вывода, вызывается соответствующая функция (a_ops->direct_IO(), ext4_direct_IO()дляext4)и возвращаются данные
  6. Если страница найдена в кэше страниц, возвращаются данныеfile_get_page()
  7. Если страница не была найдена в кэше страниц, она считывается из файловой системы с помощью a_ops->readpage(), что реализовано ext4_readpage()из ext4драйвера
  8. Стек VFS создает блок ввода -запроса вывода с использованиемsubmit_bio()

Изhttp://myaut.github.io/dtrace-stap-book/kernel/fs.htmlон немного устарел, так как стек VFS был немного переработан после того, как я написал это

0
04.11.2019, 13:11
1 ответ

Я не знаю вашей точной ситуации из информации, которую вы публикуете, поэтому позвольте мне сначала ответить на некоторые из ваших концептуальных замешательств.

command or an interrupt we need a shell that will read and interpret our input. isn't that right?

Нет. Оболочка не требуется для передачи сгенерированного с клавиатуры -сигнала (, такого как Ctrl -C ). На прием клавиатуры -вырабатывается сигнал-

  • ваш процесс должен быть приоритетным процессом ;

  • ваш процесс должен иметь управляющий терминал .

Работающий процесс переднего плана заблокирует свой терминал и перехватит текущий ввод с терминала.

Как правило, процесс входа в систему запускается командой getty, процессы, запускаемые вашей -авторизацией в оболочке, используют терминал, указанный getty, в качестве управляющего терминала. Перед входом в системуваши ранние процессы инициализации по умолчанию используют терминал консоли ядра в качестве управляющего терминала.

Вы можете узнать больше об этом в главе 9 третьего издания APUE.

Возвращаясь к вашей ситуации, обычно программы в /etc/rc?.d могут получать сгенерированные клавиатурой -сигналы с терминала консоли ядра. Я предлагаю вам опубликовать свой сценарий инициализации, чтобы мы могли увидеть, как запускается ваша программа.

Надеюсь, это поможет.

0
28.01.2020, 05:04

Теги

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