본문으로 바로가기
homeimage
  1. Home
  2. 컴퓨터/프로그래밍
  3. C언어 시그널 집합 내용을 모두 삭제 함수 sigemptyset()

C언어 시그널 집합 내용을 모두 삭제 함수 sigemptyset()

· 댓글개 · 바다야크

C함수 시그널 집합 내용을 모두 삭제 sigemptyset()

시그널 집합 변수의 모든 내용을 삭제합니다. 

  • 헤더: signal.h
  • 형태: int sigemptyset(sigset_t *set)
  • 인수: sigset_t *set 시그널 집합 변수
  • 반환: 0 == 집합 변수를 성공적으로 비웠음
    -1 == 실패했음

리눅스에는 매우 다양한 시그널이 있습니다. 이 시그널을 하나씩 처리하거나 여러 개를 하나로 묶어서 한꺼번에 처리할 수 있습니다. 시그널 집합에 sigfillset(), sigemptyset(), sigaddset(), sigdelset()으로 시그널을 추가·삭제할 수 있으며 sigismember()로 시그널 존재 여부를 확인할 수 있습니다. 그림으로 표현하면 아래와 같습니다.

시그널의 종류는 아래와 같습니다.

시그널 설명
SIGABRT abord() 함수를 호출하면 발생하며, 이 시그널을 받으면 코어 덤프하고 프로그램은 종료됩니다.
SIGALRM alarm() 함수를 호출하면 발생하며, 이 시그널을 받으면 프로세스는 종료됩니다.
SIGBUS 하드웨어 결함이 탐지되면 발생하며, 이 시그널을 받으면 프로세스는 종료됩니다.
SIGCHLD 자식 프로세스가 종료될 때 부모 프로세스에 전달됩니다.
SIGCONT 중단된 프로세스가 이 시그널을 받으면 다시 활성화되어 실행이되며, 이미 실행 중이라면 무시됩니다.
SIGFPE 0으로 나누거나 부동소수점 오류 등이 생기면 발생하며, 프로세스는 코어 덤프 후에 종료됩니다.
SIGHUP 터미널 연결이 끝어지면 이 터미널과 연결된 세션 리더 또는 세션에 속한 모든 프로세스에게 전달되면, 전달 받은 프로세스는 종료됩니다.
SIGILL 불법 명령어를 실행할 때 발생하며, 이 시그널을 받으면 코어 덤프 후에 종료합니다.
SIGINT 터미널에서 인터럽트 키 중의 하나인 Ctrl-C 를 눌렀을 때 발생하며, 프로세스는 종료됩니다.
SIGKILL 프로세스를 종료하기 위해 전송되며, 시그널을 받은 프로세스는 반드시 종료합니다.
SIGPIPE 이미 닫힌 파이프에 쓰기를 할 때 발생하며, 이 시그널을 받으면 종료합니다.
SIGQUIT 터미널에서 종료키인 Ctrl-\를 눌렀을 때 발생하며, 프로세스는 코어 덤프 후에 종료합니다.
SIGSEGV 잘못된 메모리 주소를 접근할 때 발생하며, 이 시그널을 받은 프로세스는 코어 덤프 후에 종료합니다.
SIGSTOP 프로세스를 멈추기 위해 보내지며, 이 시그널을 받은 프로세스는 반드시 멈춥니다.
SIGSYS 잘못된 시스템 호출을 했을 때 보내지며, 이 시그널을 받은 프로세스는 코어 덤프 후에 종료합니다.
SIGTERM 프로세스가 종료 전에 처리해야될 작업을 처리할 수 있도록 종료 전에 미리 보내 집니다.
SIGSTP 터미널에서 프로세스를 잠시 멈추게 하기 위해 Ctrl-Z키를 눌렀을 때 전송되며, 이 시그널을 받은 프로세스는 멈춤이 됩니다.
SIGTTIN 백그라운드에서 작업 중인 프로세스가 표준 입력을 사용하려 할 때 현재 실행 중인 프로세스에 전송되며, 이 시그널을 받은면 멈춤상태가 됩니다.
SIGTTOU 백그라운드에서 작업 중인 프로세스가 표준 출력을 사용하려 할 때 현재 실행 중인 프로세스에 전송되며, 이 시그널을 받은면 멈춤상태가 됩니다.
SIGURS1 사용자 정의로 사용할 수 있는 시그널로, 이 시그널을 받으면 프로세스는 종료합니다.
SIGURS2

C언어 sigemptyset() 함수 예제

#include <stdio.h>
#include <signal.h>

int main( void)
{
   sigset_t set;

   sigemptyset( &set);        // 시그널 집합 변수의 내용을 모두 제거합니다.
   sigaddset( &set, SIGINT);  // 시그널 집합 변수에 SIGINT를 추가합니다.

   // SIGINT 가 등록되었는지 확인합니다.

   switch( sigismember( &set, SIGINT)){
   case 1   :  printf( "SIGINT는 포함되어 있습니다.\n");
               break;
   case 0   :  printf( "SIGINT는 없습니다.\n");
               break;
   default  :  printf( "sigismember() 호출에 실패했습니다.\n");
   }

   // SIGSYS 가 등록되었는지 확인합니다.

   switch( sigismember( &set, SIGSYS)){
   case 1   :  printf( "SIGSYS는 포함되어 있습니다.\n");
               break;
   case 0   :  printf( "SIGSYS는 없습니다.\n");
               break;
   default  :  printf( "sigismember() 호출에 실패했습니다.\n");
   }

   return 0;
}

C언어 sigemptyset() 예제 실행 결과

]$ ./a.out
SIGINT는 포함되어 있습니다.
SIGSYS는 없습니다.
]$
SNS 공유하기
💬 댓글 개
최근글
이모티콘창 닫기
울음
안녕
감사해요
당황
피폐

이모티콘을 클릭하면 댓글창에 입력됩니다.