신호 SIGUSR1을 차단하는 프로그램을 만들고 신호를 차단 해제하려고합니다. 중간에 나는 신호가 sigpending
을 사용하여 차단 된 것을보고 싶습니다. 그러나 항상 신호가 차단되지 않는다고 말하면 신호가 차단되어야 할 때 신호를 사용할 수 있습니다. 이것은 내가 가지고있는 코드입니다.C에서 신호를 차단하는 방법은 무엇입니까?
#include <stdlib.h>
#include <stdio.h>
#include <signal.h>
static void signals(int signaln)
{
switch (signaln) {
case SIGUSR1:
printf("Signal SIGUSR1\n"); break;
}
return;
}
main()
{
sigset_t set,set2;
struct sigaction sigs;
sigs.sa_handler = signals;
sigemptyset(&sigs.sa_mask);
sigs.sa_flags=SA_ONESHOT;
sigaction(SIGUSR1, &sigs,0);
sigemptyset(&set);
sigemptyset(&set2);
sigaddset(&set,SIGUSR1);
if(sigprocmask(SIG_BLOCK, &set, NULL)==0){
printf("Blocking SISGUSR1...\n");
}
sigpending(&set2);
if (sigismember(&set2,SIGUSR1)==1)
{
printf("The signal is blocked\n"); //it should print this
}
wait(2);
kill(getpid(),SIGUSR1); //the signal shouldn't work
wait(2);
if(sigprocmask(SIG_UNBLOCK, &set, NULL)==0){
printf("Unblocking SIGUSR1\n");
}
}
아무도 도와 줄 수 있습니까?
대단히 감사합니다. 나는 내가해야 할 일을 이해했다.) 나는 지체하기 전에 살인을해야만한다. – Jack