Я использую sigwait, чтобы заблокировать поток для некоторых сигналов. Эти сигналы были добавлены в набор сигмов. AS согласно документу sigwait должен ждать только сигналов, переданных ему в качестве набора в аргументе, и не должен изменять маску сигналов этого потока. Но по какой-то причине я не знаю, что это меняет маску сигналов нити. Он блокирует все сигналы, кроме тех, что в сигмах. Я не хочу, чтобы это произошло.
Может ли кто-нибудь помочь мне с тем же. Спасибо заранее
Фрагмент кода:
sigset_t sigs;
int sig_recvd;
sigset_t old_mask;
sigemptyset(&sigs);
sigaddset(&sigs, SIGUSR1);
sigaddset(&sigs, SIGTERM);
sigaddset(&sigs, SIGHUP);
sigaddset(&sigs, SIGINT);
sigaddset(&sigs, SIGPIPE);
sigaddset(&sigs, SIGCHLD);
sigprocmask(SIG_BLOCK, &sigs, &old_mask);
do
{
sigwait(&sigs, &sig_recvd);
//Switch for some signal handling
} while(1);
Sigblk перед sigwait: 0000000080014203
Sigblk во время sigwait: fffffffefffabcfc
Я не понимаю, что не так с функцией sigwait, но когда я сделал то же самое с sigwaitinfo, у меня все получилось. Не могу понять, что заставило работать позже, но сейчас моя проблема решена. Но я хотел бы знать, есть ли какие-либо различия в реализации двух