학습자료(~2017)/리눅스

[리눅스] 시그널 종류와 발생 및 용도

단세포소년 2012. 3. 8. 13:05
반응형

리눅스에서 시그널함수에 void(*signal(int signo, void (*func)(int)))(int);

들어가는 첫번째 인자값  int signo 의번호, 시그널 이름, 발생 원인, 용도, 디폴트 action, 리눅스 버전 등을 좀 알려주세요

제가아는 정도는 밑에 있는 표정도 입니다.

번호 시그널 이름 발생 및 용도 디폴트 action 리눅스 버전
1 SIGHUP(HUP)  hangup 시그널; 전화선 끊어짐 종료 POSIX
2 SIGINT(INT)  interrupt 시그널; Ctrl + c ;실행을중지 종료 ANSI
3 SIGQUIT(QUIT)  quit 시그널;  Ctrl + \ 종료(코어덤프) POSIX
4 SIGILL(ILL)  잘못된 명령    ANSI
5 SIGTRAP(TRAP)  트렙 추적    POSIX
6 SIGIOT(IOT)  IOT 명령    4.2 BSD
7 SIGBUS(BUS)  버스 에러    4.2 BSD
8 SIGFPE(FPE)  부동 소수점 에러 종료 ANSI
9 SIGKILL(KILL)  무조건적으로 즉시 중지한다. 종료 POSIX
10 SIGUSR1(USR1)  사용자 정의 시그널1  종료 POSIX
11 SIGSEGV(SEGV)  세그멘테이션 위반    ANSI
12 SIGUSR2(USR2)  사용자 정의 시그널2  종료 POSIX
13 SIGPIPE(PIPE)  읽으려는 프로세스가 없는데 파이프에 쓰려고 함 종료 POSIX
14 SIGALRM(ALRM)  경보(alarm) 시그널; alarm(n)에 의해 n초 후 생성됨 종료 POSIX
15 SIGTERM(TERM)  일반적으로 kill 시그널이 전송되기 전에 전송된다. 잡히는 시그널이기 때문에 종료되는 것을 트랙할 수 있다.  종료 ANSI
16 SIGTKFLT  코프로세서 스택 실패     
17 SIGCHLD(CHLD)  프로세스 종료시 그 부모 프로세스에게 보내지는 시그널 무시 POSIX
18 SIGCONT(CONT)  STOP 시그널 이후 계속 진행할 때 사용. ; 정지 되지 않은 경우 무시됨   POSIX
19 SIGSTOP(STOP)  정지 시그널; SIGSTP과 같으나 잡거나 무시할 수 없음 프로세스 정지 POSIX
20 SIGTSTP(TSTP)  키보드에 의해 발생하는 시그널로 Ctrl+Z로 생성된다. ; 터미널 정지 문자 프로세스 정지 POSIX
21 SIGTTIN  백그라운드에서의 제어터미널 읽기  프로세스 정지 POSIX
22 SIGTTOU  백그라운드에서의 제어터미널 쓰기  프로세스 정지 POSIX
23 SIGURG  소켓에서의 긴급한 상태    4.2 BSD
24 SIGXCPU  CPU 시간 제한 초과 setrlimit(2) 메뉴얼 패이지 참조    4.2 BSD
25 SIGXFSZ  파일 크기제한 초과 setrlimit(2) 메뉴얼 패이지 참조    4.2 BSD
26 SIGVTALRM  가상 시간 경고 setitimer(2) 메뉴얼 패이지 참조    4.2 BSD
27 SIGPROF  프로파일링 타이머 경고. setitimer(2) 메뉴얼 페이지 참조    4.2 BSD
28 SIGWINCH  윈도우 사이즈 변경    4.3 BSD, Sun
29 SIGIO  기술자에서 입출력이 가능함. fcntl(2) 메뉴얼 참조    4.2 BSD
30 SIGPWR  전원 실패    System V
31 UNUSED  사용 안함 
   


출처 : http://www.superuser.co.kr/superuserboard/view.html?id=16602&code=linux&start=200&position=




◈ SIGHUP
- 터미널 인터페이스에 의해 연결의 단절이 감지되면 해당 제어 터미널과 연결된 제어 프로세스(세션 리더)에게 전달
- 세션 리더가 종료했을 때도 발생하는데 이때는 foreground 프로세스 그룹내의 모든 프로세스들에게 전달
- SIGHUP 시그널은 원래 모뎀 연결 끊김 등의 시리얼 라인이 끊어지면 발생하는 시그널이다.
- 이름 있는 시스템 데몬들은 SIGHUP 시그널을 configure file을 다시 읽어들이는 등의 초기화 신호로 해석한다.
  . bootp(8), gated(8), inetd(8), mountd(8), named(8), nfsd(8), ypbind(8)
  . pppd(8) 처럼 SIGHUP을 원래의 의도에 충실하게 세션 종료의 뜻으로 받아들이는 사례도 간혹 있는데, 요새는 보편적으로 이 역할을 SIGTERM이 맡는다.
  . daemon은 제어 단말기 없이 돌기 때문에 kernel로부터 SIGHUP 신호를 수신하지 못한다.
    그러므로 많은 daemon은 이 신호를 daemon의 구성 파일이 변경되어 daemon이 그 파일을 새로 읽어야 된다는 것을 알려주는 관리자로부터의 통지로 사용한다.
  . daemon이 수신할 수 없는 다른 두 개의 신호로 SIGINT와 SIGWINCH가 있고 이들도 역시 어떤 변화를 daemon에게 통지하기 위해 사용될 수 있다.

◈ SIGINT
- 인터럽트 키 (DELETE 또는 Control-C)가 눌렸을 때 발생

◈ SIGQUIT
- Control-backslash 에 의해 발생

◈ SIGCHLD
- 프로세스가 종료하거나 정지하면, 부모 프로세스에게 전달된다.
- 부모 프로세스는 wait() 시스템 콜을 사용하여 무슨 일이 일어났는지 알아본다.
- 이 시그널에 대한 default 처리는 무시하는 것이다. 즉 프로세스가 이 신호를 받으려고 할 때만 전달된다.

◈ SIGSEGV
- 유효하지 않은 가상 메모리 주소를 참조하거나 사용 권한이 없는 메모리에 접근할 때 프로세스로 전달된다.

◈ SIGTERM
- kill 명령에 의해 기본적으로 발생

◈ SIGKILL
- "극단의 조치(extreme prejudice)"로 프로그램을 종료하는 데 사용된다.
- 시그널 catch 하거나 무시할 수 없다.

◈ SIGALRM
- alarm()이나 setitimer() 시스템 콜로 설정한 알람 시간이 초과 했을 때 프로세스로 전달된다.

◈ SIGTSTP
- 
Control-Z 키에 의해 발생
- 기본 처리 방법은 SIGCONT 신호를 받을 때까지 프로세스를 중단한다.

◈ SIGCONT
-
 정지한 프로세스를 계속 실행시키려 할 때 발생
- 이 신호는 받을 수 있지만 블록하거나 무시할 수 없다.
- 기본 처리 방법은 중단된 프로세스를 재시작하는 것이다. 그러나 프로세스가 신호를 받지 않는다면 신호를 버린다.
- vi 에디터를 사용할 때
. Control-Z 를 눌러 수행을 잠시 정지시키면 쉘이 키 입력을 처리하게 되는데
. 이때 fg 명령을 실행시키면 쉘은 vi 에게 SIGCONT 시그널을 전달하며
. vi는 이 시그널에 대한 처리로 화면을 다시 그리고 사용자 키 입력을 받는 상태로 돌아간다.

◈ SIGSTOP
- 
SIGTSTP과 동일하나 catch 하거나 무시할 수 없다.
- 이 신호를 받으면 무조건 SIGCONT 신호를 받을 때까지 프로세스를 중단한다.

◈ SIGABRT
-
 abort() 함수의 호출로 발생

◈ SIGBUS
-
 하드웨어 결함으로 발생

◈ SIGEMT
-
 하드웨어 결함으로 발생

SIGFPE
-
 divide-by-0나 부동 소숫점 오버플로우와 같은 산술 연산 오류에서 발생

◈ SIGILL

◈ SIGINFO

◈ SIGIO

◈ SIGIOT

◈ SIGPIPE
-
 pipe 통신에서 수신 프로세스가 종료했을 때 송신 프로세스가 파이프에 write 하면 발생
- 프로세스가 RST를 받은 소켓에 데이터를 쓰면, 커널은 그 프로세스에 ISGPIPE 신호를 보낸다.
- 이 신호의 기본 동작은 프로세스를 종료시키는 것이므로, 프로세스가 원하지 않는 종료를 피하기 위해서는 이 신호를 포착해야 한다.

◈ SIGPOLL

◈ SIGROF

◈ SIGPWR

◈ SIGSYS

◈ SIGTTIN
-
 background에 있는 프로세스가 제어 터미널로부터의 읽기를 시도한다.

◈ SIGTTOU
-
 background에 있는 프로세스가 제어 터미널로부터의 쓰기를 시도한다.

◈ SIGURG
-
 SIGIO와 SIGURG 라는 두 개의 신호는 소켓이 F_SETOWN 명령으로 소유주에게 할당되었을 때만 소켓에 대해 발생한다.

◈ SIGUSR1

◈ SIGUSR2

◈ SIGVTALRM

◈ SIGWINCH

◈ SIGXCPU

◈ SIGXFSZ


반응형