Я извиняюсь, что не ответил на предложения по предыдущей моей теме, но меня перекиунли на другой проект. Когда вернут, обязательно просмотрю.
Вопрос. Написал драйвер, который посылает сигнал. Соответственно он посылает из kernel-space в user-space. Пользуюсь функцией ядра kill_fasync. Но как я ни пытался послать другой сигнал, всегда посылается SIGIO.
Можно ли послать таки другой сигнал этой функцией?
Заранее спасибо.
Посылка сигнала (Посылка сигнала)
Модератор: Модераторы разделов
-
- Сообщения: 1338
- Статус: We are all Kosh
- ОС: Fedora 10
-
- Сообщения: 1341
- ОС: Arch Linux amd64
-
- Сообщения: 29
- ОС: Linux Fedora 8
Re: Посылка сигнала
Целиком выложить код драйвера не могу, но относящиеся к вопросу части выложу(В четверг.Когда буду на работе).
Даже если можно,сигнал то один и тот же.А как мне различать, откуда он пришёл?
-
- Сообщения: 1341
- ОС: Arch Linux amd64
Re: Посылка сигнала
функция kill_fasync() отправляет только сигнал SIGIO:
таким образом, чтобы передавать процессу различные сигналы, вам скорее всего, придется самому все реализовать. скажу что когда я писал подобный драйвер (он позволял зарегистрированным драйвером процессам передавать друг другу сигналы, данные), то поступил так:
1) Драйвер регистрировал символьное устройство.
2) PID и указатель на структуру task_struct открывающего устройство процесса помещались в специальный список "ожидания".
3) Процесс подтверждал свою регистрацию отсылкой специальной ioctl-команды и переходил из списка "ожидания" в список зарегестрированных процессов.
4) С помощью ioctl-команд процесс мог указать какие сообщения он может принимать, к примеру запретить отправку ему сигнала SIGKILL, и от каких процессов он бы хотел их получать (можно было указать имя или PID процесса).
в принципе ничего сложного (около 800-900 строк вроде вышло).
(http://lwn.net/Articles/64234/) писал(а):Unix systems, and their variants, provide a number of ways for processes to manage multiple I/O streams simultaneously. One of those is through the use of I/O signals; a process can request to receive a SIGIO whenever a given file descriptor becomes available for reading or writing. Inside the kernel, this signalling is handled via a file-specific fasync_struct structure and a couple of helper functions. One of them, called fasync_helper(), simply helps the kernel (filesystem or driver) code track which processes have requested notification for a given file. The other, kill_fasync(), is invoked to actually deliver a signal to interested processes when the time comes.
таким образом, чтобы передавать процессу различные сигналы, вам скорее всего, придется самому все реализовать. скажу что когда я писал подобный драйвер (он позволял зарегистрированным драйвером процессам передавать друг другу сигналы, данные), то поступил так:
1) Драйвер регистрировал символьное устройство.
2) PID и указатель на структуру task_struct открывающего устройство процесса помещались в специальный список "ожидания".
3) Процесс подтверждал свою регистрацию отсылкой специальной ioctl-команды и переходил из списка "ожидания" в список зарегестрированных процессов.
4) С помощью ioctl-команд процесс мог указать какие сообщения он может принимать, к примеру запретить отправку ему сигнала SIGKILL, и от каких процессов он бы хотел их получать (можно было указать имя или PID процесса).
в принципе ничего сложного (около 800-900 строк вроде вышло).
-
- Сообщения: 29
- ОС: Linux Fedora 8
Re: Посылка сигнала
2 RasenHerz
Спасибо.Я думаю тему можно сщитать исчерпанной.Очень жаль что нет готового решения.Не уверен,что дадут достаточно времени(на работе) на это.
Ещё раз спасибо.
Спасибо.Я думаю тему можно сщитать исчерпанной.Очень жаль что нет готового решения.Не уверен,что дадут достаточно времени(на работе) на это.
Ещё раз спасибо.