강좌
클라우드/리눅스에 관한 강좌입니다.
리눅스 분류

리눅스마스터1급: ANSI C 시그널 처리

작성자 정보

  • 관리자 작성
  • 작성일

컨텐츠 정보

본문

리눅스마스터1: ANSI C 시그널 처리




 

 

signal



ANSI C 시그널을 처리한다.

 

 

 

1) 개요

 

 

 

 

#!include <signal.h>

void (*signal(int signum, void (*handler)(int)))(int);

 

 

 

 

2) 설명

signal 시스템 콜은 signum 번호의 시그널에 대해 새로운 시그널 핸들러를 설치한다.

 

 

 

시그널 핸들러는 handler로 설정되고, 사용자 정의 함수이거나 다음 중 하나가 될 수 있다.

 

 

 

 

SIG_IGN : 시그널을 무시한다.

 

 

 

SIG_DFL : 시그널의 초기 기본 동작을 하도록 한다.

 

 

 

시그널 핸들러 루틴에 넘겨지는 정수 인자는 시그널 번호이다.

 

 

 

이는 여러 시그널에 대해 하나의 시그널 핸들러를 사용할 수 있게 한다.

 

 

 

반환 값 : signal은 이전의 시그널 핸들러의 포인터나 에러시 SIG_ERR을 리턴한다.

 

 

 

 

POSIX에 따르면 kill()raise() 함수로 발생시킬 수 없는 SIGFPE, SIGILL 또는 SIGSEGV 시그널을 무시한 후 프로세스의 동작을 알 수 없다.

 

 

 

0으로 나눠진 정수는 알 수 없는 결과를 낸다.

 

 

 

어떤 아키텍처에서는 SIGFPE 시그널이 발생한다(-1로 음의 정수를 나누는 것도 SIGFPE를 발생시킨다). 이 시그널을 무시하면 무한 루프에 빠질 수도 있다.

 

 

 

 

POSIX(B.3.3.1.3)에 따르면 SIGCHLD에 대한 동작은 SIG_IGN으로 설정해서는 안 된다.

 

 

 

여기서 BSDSYSV가 다르다.

 

 

 

SIGCHLD의 동작을 SIG_IGN으로 설정하는 BSD 소프트웨어는 리눅스에서는 실패한다.

 

 

 

 

 

관련자료

댓글 0
등록된 댓글이 없습니다.

공지사항


뉴스광장


  • 현재 회원수 :  60,039 명
  • 현재 강좌수 :  35,844 개
  • 현재 접속자 :  127 명