• 카테고리

    질문 & 답변
  • 세부 분야

    시스템

  • 해결 여부

    미해결

sigprocmask에서 oldset에 대한 질문입니다

19.07.24 15:42 작성 조회수 128

0

oldset에 동작이 어떻게 이뤄지는 지 궁금합니다

1. signal set, oldset을 초기화한 후

2. set에 SIGINT를 추가하고 block을 시키는데 여기서 oldset을 3번째 변수에 넣게되는데

이전에 시그널 proc이 없었기 때문에 oldset = NULL이라고 생각하면 될까요?

3. 그리고 oldset을 procmask에 등록을 시키면 이땐 아무 시그널도 block 되지 않는 것인가요?

 

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <unistd.h>
#include <signal.h>

int main(int argc, char **argv) {
    sigset_t set, oldset;

    sigemptyset(&oldset);
    sigemptyset(&set);

    sigaddset(&set, SIGINT);
    printf("SIGINT BLOCKING........\n");
    sigprocmask(SIG_BLOCK, &set, &oldset);
    sleep(3);

    printf("SIGSETMASK......\n");
    sigprocmask(SIG_SETMASK, &oldset, NULL);
    while(1) {
        sleep(1);
    }
    return 0;
}

 

답변 1

답변을 작성해보세요.

0

네. 처음으로 sigprocmask()를 호출하셔서 받아온 oldset에는 블록하는 시그널이 설정되어 있지 않을 것입니다. 따라서 sigprocmask()에 oldset을 재설정 하시면 아무 시그널도 블록하지 않는 기본 상태가 됩니다. 잘 이해하고 계시네요 :)