Посылка сигнала (Посылка сигнала)

Взгляд изнутри

Модератор: Модераторы разделов

Ответить
rapa
Сообщения: 29
ОС: Linux Fedora 8

Посылка сигнала

Сообщение rapa »

Я извиняюсь, что не ответил на предложения по предыдущей моей теме, но меня перекиунли на другой проект. Когда вернут, обязательно просмотрю.
Вопрос. Написал драйвер, который посылает сигнал. Соответственно он посылает из kernel-space в user-space. Пользуюсь функцией ядра kill_fasync. Но как я ни пытался послать другой сигнал, всегда посылается SIGIO.
Можно ли послать таки другой сигнал этой функцией?

Заранее спасибо.
Спасибо сказали:
Аватара пользователя
BlackStar
Сообщения: 1338
Статус: We are all Kosh
ОС: Fedora 10
Контактная информация:

Re: Посылка сигнала

Сообщение BlackStar »

Код драйвера и user-space приложения в студию.
LightLang Team
Спасибо сказали:
Аватара пользователя
RasenHerz
Сообщения: 1341
ОС: Arch Linux amd64

Re: Посылка сигнала

Сообщение RasenHerz »

вроде, сигналы ж в очередь выстраивать можно.. не то?
Спасибо сказали:
rapa
Сообщения: 29
ОС: Linux Fedora 8

Re: Посылка сигнала

Сообщение rapa »

BlackStar писал(а):
08.04.2009 11:29
Код драйвера и user-space приложения в студию.

Целиком выложить код драйвера не могу, но относящиеся к вопросу части выложу(В четверг.Когда буду на работе).

RasenHerz писал(а):
08.04.2009 12:32
вроде, сигналы ж в очередь выстраивать можно.. не то?

Даже если можно,сигнал то один и тот же.А как мне различать, откуда он пришёл?
Спасибо сказали:
Аватара пользователя
RasenHerz
Сообщения: 1341
ОС: Arch Linux amd64

Re: Посылка сигнала

Сообщение RasenHerz »

функция kill_fasync() отправляет только сигнал SIGIO:
(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 строк вроде вышло).
Спасибо сказали:
rapa
Сообщения: 29
ОС: Linux Fedora 8

Re: Посылка сигнала

Сообщение rapa »

2 RasenHerz
Спасибо.Я думаю тему можно сщитать исчерпанной.Очень жаль что нет готового решения.Не уверен,что дадут достаточно времени(на работе) на это.

Ещё раз спасибо.
Спасибо сказали:
Ответить