как определить количество сигналов, ожидающих в очереди сигналов Unix (Linux) - PullRequest
6 голосов
/ 18 декабря 2009

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

Этот API должен вызываться из потока, отличного от потока, к которому мы обращаемся.

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

Любая помощь приветствуется.

Ответы [ 2 ]

6 голосов
/ 09 января 2010

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

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

В Linux чтение () из signalfd позволит одновременно считывать более одного экземпляра сигнала, если они находятся в очереди.

3 голосов
/ 18 декабря 2009

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

[EDIT] Если этого недостаточно, то у вас есть источник: просто изучите код и структуры данных и используйте то, что вам нужно, чтобы заглянуть в структуры ядра. Но это может включать в себя написание модуля (поскольку структуры данных ядра не читаются процессом), плюс ваш код станет зависимым от ядра, на котором он был скомпилирован. Поэтому я советую против такого подхода.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...