как решить, что количество сигналов, ожидающих в Unix, сигнализирует об очереди (Linux)

Я должен найти количество сигналов, ожидающих в очереди сигнала потока в Linux. Есть ли какой-либо API, который обеспечивается Linux?

Этот API нужно назвать от потока кроме потока, который мы запрашиваем.

sigpending дает API для вызывающего потока. Есть ли любой API, который берет идентификатор потока в качестве аргумента и предоставляет некоторую информацию о сигналах, ожидающих в очереди.

Любая справка ценится.

6
задан Hannes Ovrén 5 March 2010 в 10:16
поделиться

2 ответа

Я не знаю такого API, но вот обходной путь: напишите небольшую библиотеку который завершает сигнальный код. Когда вы посылаете сигнал, увеличивайте атомный счетчик. По мере обработки сигналов снова уменьшайте счетчик. Затем вы можете использовать этот атомный счетчик, чтобы ответить на свое любопытство.

[РЕДАКТИРОВАТЬ] Если этого недостаточно, то у вас есть источник: просто изучите код и задействованные структуры данных и используйте то, что вам нужно, чтобы заглянуть в структуры ядра. Но это может включать в себя написание модуля (поскольку структуры данных ядра не читаются процессом), плюс ваш код станет зависимым от ядра, на котором он был скомпилирован. Поэтому я не рекомендую этот подход.

3
ответ дан 10 December 2019 в 02:48
поделиться
[

] sigpending() возвращает набор сигналов, ожидающих доставки для потока. Вы можете выполнить итерацию над этим sigset_t и использовать sigismember() для проверки на членство.[

] [

]Традиционно UNIX не ставит в очередь более одного экземпляра сигнала (в этом смысле они продолжают оставаться "ненадежными"). Иногда такой эффект можно получить с помощью сигналов в реальном времени.[

] [

]В Linux, read()ing из signalfd позволит прочитать сразу несколько экземпляров сигнала, если они стоят в очереди.[

].
6
ответ дан 10 December 2019 в 02:48
поделиться
Другие вопросы по тегам:

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