반응형
리눅스에서 시그널함수에 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
- 터미널 인터페이스에 의해 연결의 단절이 감지되면 해당 제어 터미널과 연결된 제어 프로세스(세션 리더)에게 전달
- 세션 리더가 종료했을 때도 발생하는데 이때는 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
반응형
'학습자료(~2017) > 리눅스' 카테고리의 다른 글
[리눅스] Multi Thread, Mutl Processor, concurrency - parallel 관련 내용 정리 사이트 (0) | 2012.03.08 |
---|---|
[리눅스] pthread 함수 간단한 요약 정리, 자세한 참고사이트 링크 (1) | 2012.03.08 |
[리눅스] 시간 관련 함수, 자료 정리 (0) | 2012.03.07 |
[rrdtool] 설치관련 사이트 (0) | 2012.03.02 |
[PHP] php 에 ssh2 라이브러리 연동하기 (0) | 2012.03.02 |