я написал небольшой кусочек кода. Этот код сначала блокирует {SIGSEGV}, затем добавляет SIGRTMIN к тому же набору. Итак, мой последний набор сигналов: {SIGSEGV, SIGRTMIN}. Таким образом, если я использую SIG_UNBLOCK, согласно моему пониманию, сначала должен быть разблокирован SIGRTMIN, а затем снова, если я вызываю SIG_UNBLOCK, SIGSEGV должен быть разблокирован.
То есть 1) {SIGSEGV, SIGRTMIN} 2) SIG_UNBLOCK = разблокировать SIGRTMIN, 3) Снова вызвать SIG_UNBLOCK = разблокировать SIGSEGV.
Я даю процессу только SIGRTMIN, поэтому моя вторая разблокировка должна остановить процесс с помощью SIGRTMIN. Но это не так. Пожалуйста помоги.
N.B: Пожалуйста, не давайте ссылки на ответы на другие вопросы о sigprocmask (), я их видел, и они не прояснили мой вопрос.
enter code here
#include <signal.h>
#include <unistd.h>
#include <stdio.h>
int main()
{
sigset_t old_set,new_set;
sigemptyset(&old_set);
sigemptyset(&new_set);
if(sigaddset(&old_set,SIGSEGV)==0)
{
printf("sigaddset successfully added for SIGSEGV\n");
}
sigprocmask(SIG_BLOCK,&old_set,NULL); // SIGSEGV signal is masked
kill(0,SIGSEGV);
//*****************************************************************
if(sigaddset(&new_set,SIGRTMIN)==0)
{
printf("sigaddset successfully added for SIGRTMIN\n");
}
sigprocmask(SIG_BLOCK,&new_set,&old_set); // SIGRTMIN signal is masked
kill(0,SIGSEGV);
//****************** Unblock one signal at a time ******************
sigprocmask(SIG_UNBLOCK,&new_set,&old_set); // SIGRTMIN signal is unmasked
sigprocmask(SIG_UNBLOCK,&new_set,&old_set); // SIGSEGV signal is unmasked
}
Output:
[root@dhcppc0 signals]# ./a.out
sigaddset successfully added for SIGSEGV
sigaddset successfully added for SIGRTMIN
(Note:SIGSEGV is not received even after sigprocmask(SIG_UNBLOCK,&new_set,&old_set); a second time)