Я должен найти количество сигналов, ожидающих в очереди сигнала потока в Linux. Есть ли какой-либо API, который обеспечивается Linux?
Этот API нужно назвать от потока кроме потока, который мы запрашиваем.
sigpending дает API для вызывающего потока. Есть ли любой API, который берет идентификатор потока в качестве аргумента и предоставляет некоторую информацию о сигналах, ожидающих в очереди.
Любая справка ценится.
Я не знаю такого API, но вот обходной путь: напишите небольшую библиотеку который завершает сигнальный код. Когда вы посылаете сигнал, увеличивайте атомный счетчик. По мере обработки сигналов снова уменьшайте счетчик. Затем вы можете использовать этот атомный счетчик, чтобы ответить на свое любопытство.
[РЕДАКТИРОВАТЬ] Если этого недостаточно, то у вас есть источник: просто изучите код и задействованные структуры данных и используйте то, что вам нужно, чтобы заглянуть в структуры ядра. Но это может включать в себя написание модуля (поскольку структуры данных ядра не читаются процессом), плюс ваш код станет зависимым от ядра, на котором он был скомпилирован. Поэтому я не рекомендую этот подход.
] sigpending() возвращает набор сигналов, ожидающих доставки для потока. Вы можете выполнить итерацию над этим sigset_t и использовать sigismember() для проверки на членство.[
] []Традиционно UNIX не ставит в очередь более одного экземпляра сигнала (в этом смысле они продолжают оставаться "ненадежными"). Иногда такой эффект можно получить с помощью сигналов в реальном времени.[
] []В Linux, read()ing из signalfd позволит прочитать сразу несколько экземпляров сигнала, если они стоят в очереди.[
].