Я ищу способ, изнутри обработчика сигнала, условно прервать системный вызов таким образом, который происходит во время обработки сигнала.Для того, чтобы сделать это, предположим, что вызов read
выполняется, и SIGRT0
получено.Этот обработчик сигнала использует SA_RESTART
, потому что он не хочет безоговорочно прерывать системные вызовы, но в зависимости от условия я хочу, чтобы read
возвращал EINTR
сразу после возвращения обработчика сигнала.
В одну сторонуЯ мог бы сделать это, настроив другой обработчик сигнала для SIGRT1
, поместив SIGRT1
в маску сигнала для обработчика SIGRT0
и исключив SA_RESTART
из обработчика SIGRT1
.Затем обработчик для SIGRT0
может raise
SIGRT1
, а когда возвращается первый, не прерывающийся обработчик сигнала, запускается второй, и read
прерывается.
Проблема с этим решениемчто другие процессы могут отправлять SIGRT1
, вызывая нежелательные EINTR
вхождения.
Есть ли какой-нибудь способ добиться результата, который я ищу?