Linux 신호 목록 (zz)

7106 단어 linux
from: http://hi.baidu.com/walfer/blog/item/fa649f457276f53e86947302.html
우 리 는 리 눅 스 가 지원 하 는 신호 목록 을 볼 수 있 도록 다음 명령 을 실행 합 니 다.
$ kill -l
1) SIGHUP        2) SIGINT        3) SIGQUIT       4) SIGILL
 5) SIGTRAP       6) SIGABRT       7) SIGBUS        8) SIGFPE
 9) SIGKILL      10) SIGUSR1      11) SIGSEGV      12) SIGUSR2
13) SIGPIPE      14) SIGALRM      15) SIGTERM      17) SIGCHLD
18) SIGCONT      19) SIGSTOP      20) SIGTSTP      21) SIGTTIN
22) SIGTTOU      23) SIGURG       24) SIGXCPU      25) SIGXFSZ
26) SIGVTALRM    27) SIGPROF      28) SIGWINCH     29) SIGIO
30) SIGPWR       31) SIGSYS       34) SIGRTMIN     35) SIGRTMIN+1
36) SIGRTMIN+2   37) SIGRTMIN+3   38) SIGRTMIN+4   39) SIGRTMIN+5
40) SIGRTMIN+6   41) SIGRTMIN+7   42) SIGRTMIN+8   43) SIGRTMIN+9
44) SIGRTMIN+10 45) SIGRTMIN+11 46) SIGRTMIN+12 47) SIGRTMIN+13
48) SIGRTMIN+14 49) SIGRTMIN+15 50) SIGRTMAX-14 51) SIGRTMAX-13
52) SIGRTMAX-12 53) SIGRTMAX-11 54) SIGRTMAX-10 55) SIGRTMAX-9
56) SIGRTMAX-8   57) SIGRTMAX-7   58) SIGRTMAX-6   59) SIGRTMAX-5
60) SIGRTMAX-4   61) SIGRTMAX-3   62) SIGRTMAX-2   63) SIGRTMAX-1
64) SIGRTMAX

목록 에서 번호 1 ~ 31 의 신 호 는 전통 적 인 UNIX 가 지원 하 는 신호 로 신뢰 할 수 없 는 신호 (비 실시 간) 이 고 번호 32 ~ 63 의 신 호 는 나중에 확 대 된 것 으로 신뢰 할 수 있 는 신호 (실시 간 신호) 라 고 부른다.신뢰 할 수 없 는 신호 와 신뢰 할 수 있 는 신호 의 차 이 는 전자 가 줄 을 서 는 것 을 지원 하지 않 고 신 호 를 잃 어 버 릴 수 있 으 며 후 자 는 그렇지 않다 는 것 이다.
다음은 SIGRTMIN 보다 번호 가 작은 신호 에 대해 논의 하 겠 습 니 다.
1) SIGHUP 이 신 호 는 사용자 단말기 연결 (정상 또는 비정 상) 이 끝 날 때 보 냅 니 다. 보통 터미널 의 제어 프로 세 스 가 끝 날 때 같은 session 내의 각 작업 을 알 립 니 다. 이 때 는 제어 단말기 와 더 이상 연결 되 지 않 습 니 다.
Linux 에 로그 인 할 때 시스템 은 로그 인 사용자 에 게 터미널 (Session) 을 할당 합 니 다.이 터미널 에서 실행 되 는 모든 프로그램 은 프론트 프로 세 스 그룹 과 백 엔 드 프로 세 스 그룹 을 포함 하여 일반적으로 이 세 션 에 속 합 니 다.사용자 가 Linux 로그 인 을 종료 할 때 프론트 데스크 톱 프로 세 스 그룹 과 배경 에 터미널 출력 프로 세 스 가 있 으 면 SIGHUP 신 호 를 받 습 니 다.이 신호 의 기본 동작 은 프로 세 스 를 종료 하 는 것 입 니 다. 따라서 프론트 프로 세 스 그룹 과 백 엔 드 에 터미널 출력 이 있 는 프로 세 스 가 중 단 됩 니 다.그러나 이 신 호 를 포착 할 수 있 습 니 다. 예 를 들 어 wget 은 SIGHUP 신 호 를 포착 하고 무시 할 수 있 습 니 다. 그러면 Linux 로그 인 을 종료 하 더 라 도 wget 은 계속 다운로드 할 수 있 습 니 다.
또한 터미널 과 관 계 를 끊 은 데 몬 에 대해 서 는 설정 파일 을 다시 읽 는 것 을 알 리 는 데 사 용 됩 니 다.
2) SIGINT 프로그램 종료 (interrupt) 신 호 는 사용자 가 INTR 문자 (보통 Ctrl - C) 를 입력 했 을 때 보 내 며 프론트 프로 세 스 그룹 에 프로 세 스 종 료 를 알 리 는 데 사 용 됩 니 다.
3) SIGQUIT 는 SIGINT 와 유사 하지만 QUIT 문자 (보통 Ctrl - \) 로 제어 합 니 다. 프로 세 스 는 SIGQUIT 가 종료 되 었 을 때 core 파일 이 발생 합 니 다. 이 의미 에서 프로그램 오류 신호 와 유사 합 니 다.
4) SIGILL 은 불법 명령 을 실 행 했 습 니 다. 보통 실행 가능 한 파일 자체 에 오류 가 발생 하거나 데이터 세그먼트 를 실행 하려 고 하기 때 문 입 니 다. 스 택 이 넘 칠 때 도 이 신호 가 발생 할 수 있 습 니 다.
5) SIGTRAP 는 정지점 명령 이나 다른 trap 명령 으로 만들어 집 니 다. debugger 에서 사용 합 니 다.
6) SIGABRT 는 abort 함수 로 생 성 된 신 호 를 호출 합 니 다.
7) SIGBUS 불법 주소, 메모리 주소 정렬 (alignment) 오류 포함.예 를 들 어 네 글자 길이 의 정 수 를 방문 하지만 주 소 는 4 의 배수 가 아니다.이 는 SIGSEGV 와 의 차이 점 은 후자 가 합 법 적 으로 주 소 를 저장 하 는 불법 방문 으로 인해 발생 한 것 이다 (예 를 들 어 방문 은 자신의 저장 공간 에 속 하지 않 거나 저장 공간 만 읽 기).
8) SIGFPE 는 치 명 적 인 산술 연산 오류 가 발생 했 을 때 보 냅 니 다. 부동 소수점 연산 오류 뿐만 아니 라 넘 침 및 나 누 기 0 등 모든 산술 오류 도 포함 합 니 다.
9) SIGKILL 은 프로그램의 실행 을 즉시 종료 하 는 데 사 용 됩 니 다. 이 신 호 는 차단, 처리, 무시 할 수 없습니다.관리자 가 어떤 프로 세 스 가 종료 되 지 않 는 다 는 것 을 발견 하면 이 신 호 를 보 내 려 고 시도 할 수 있 습 니 다.
10) SIGUSR 1 은 사용자 에 게 사용 하도록 남 겨 준다.
11) SIGSEGV 는 자신 에 게 할당 되 지 않 은 메모리 에 접근 하거나 쓰기 권한 이 없 는 메모리 주소 로 데 이 터 를 쓰 려 고 합 니 다.
12) SIGUSR 2 는 사용자 에 게 사용 하도록 남 겨 준다.
13) SIGPIPE 파이프 파열.이 신 호 는 보통 프로 세 스 간 통신 에서 발생 합 니 다. 예 를 들 어 FIFO (파이프) 통신 을 사용 하 는 두 프로 세 스 는 파 이 프 를 열지 않 거나 예상 치 못 하 게 종료 되면 파이프 에 쓰 고 프로 세 스 를 쓰 면 SIGPIPE 신 호 를 받 습 니 다.또한 Socket 으로 통신 하 는 두 프로 세 스 는 Socket 을 쓸 때 읽 기 프로 세 스 가 종료 되 었 습 니 다.
14) SIGALRM 시계 정시 신호 로 실제 시간 이나 시계 시간 을 계산 합 니 다. alarm 함 수 는 이 신 호 를 사용 합 니 다.
15) SIGTERM 프로그램 종료 (terminate) 신 호 는 SIGKILL 과 달리 이 신호 가 차단 되 고 처 리 될 수 있다.일반적으로 프로그램 이 정상적으로 종료 하도록 요구 하 는 데 사 용 됩 니 다. 셸 명령 kill 이 부족 하면 이 신 호 를 보 냅 니 다.프로 세 스 가 종료 되 지 않 으 면 SIGKILL 을 시도 할 수 있 습 니 다.
17) SIGCHLD 하위 프로 세 스 가 끝 날 때 부모 프로 세 스 가 이 신 호 를 받 습 니 다.
부모 프로 세 스 가 이 신 호 를 처리 하지 않 았 고 (wait) 하위 프로 세 스 를 기다 리 지 않 았 다 면 하위 프로 세 스 는 종료 되 었 지만 커 널 프로 세 스 표 에서 표 항목 을 차지 할 것 입 니 다. 이 때 하위 프로 세 스 는 좀 비 프로 세 스 라 고 합 니 다.이러한 상황 에서 우 리 는 (부모 프로 세 스 나 SIGCHILD 신 호 를 무시 하거나 포착 하거나 wait 에서 파생 된 하위 프로 세 스 나 부모 프로 세 스 가 먼저 종료 되 는 것 을 피해 야 합 니 다. 이때 하위 프로 세 스 의 종 료 는 init 프로 세 스 가 자동 으로 연결 합 니 다).
18) SIGCONT 은 정지 (stopped) 된 프로 세 스 를 계속 실행 시 킵 니 다. 이 신 호 는 차단 되 지 않 습 니 다. 프로그램 이 stopped 상태 에서 계속 실행 할 때 특정한 작업 을 수행 할 수 있 도록 handler 를 사용 할 수 있 습 니 다. 예 를 들 어 프롬프트 를 다시 표시 합 니 다.
19) SIGSTOP 는 프로 세 스 의 실행 을 중단 합 니 다. terminate 와 interrupt 의 차이 점 을 주의 하 십시오. 이 프로 세 스 는 아직 끝나 지 않 았 습 니 다. 실행 을 중단 할 뿐 입 니 다. 이 신 호 는 차단 되 거나 처리 되 거나 무시 할 수 없습니다.
20) SIGTSTP 는 프로 세 스 의 실행 을 중지 하지만, 이 신 호 는 처리 되 거나 무시 할 수 있 습 니 다. 사용자 가 SUSP 문 자 를 입력 했 을 때 (보통 Ctrl - Z) 이 신 호 를 보 냅 니 다.
21) SIGTIN 은 배경 작업 이 사용자 터미널 에서 데 이 터 를 읽 으 려 면 이 작업 의 모든 프로 세 스 가 SIGTIN 신 호 를 받 습 니 다. 부족 할 때 이 프로 세 스 는 실행 을 중단 합 니 다.
22) SIGTTOU 는 SIGTTIN 과 유사 하지만 터미널 (또는 터미널 모드 수정) 을 쓸 때 받 습 니 다.
23) SIGURG 는 "긴급" 데이터 나 out - of - band 데이터 가 socket 에 도 착 했 을 때 발생 합 니 다.
24) SIGXCPU 는 CPU 시간 자원 제한 을 초과 합 니 다. 이 제한 은 getrlimit / settrimit 에서 읽 거나 변경 할 수 있 습 니 다.
25) SIGXFSZ 는 프로 세 스 가 파일 크기 의 자원 제한 을 초과 할 때 파일 을 확대 하려 고 합 니 다.
26) SIGVTALRM 가상 시계 신호 입 니 다. SIGALRM 과 유사 하지만 이 프로 세 스 가 사용 하 는 CPU 시간 을 계산 합 니 다.
27) SIGROF 는 SIGALRM / SIGVTALRM 과 유사 하지만 이 프로 세 스 가 사용 하 는 CPU 시간 과 시스템 호출 시간 을 포함한다.
28) SIGWINCH 창 크기 가 바 뀌 었 을 때 보 냅 니 다.
29) SIGIO 파일 설명자 가 준비 되 어 있 으 며 입 출력 작업 을 시작 할 수 있 습 니 다.
30) SIGPWR Power failure
31) SIGSYS 의 불법 시스템 호출
위 에 열 거 된 신호 에서 프로그램 이 캡 처 하거나 차단 하거나 무시 할 수 없 는 신 호 는 SIGKILL, SIGTOP 이 기본 동작 으로 복구 할 수 없다 는 신 호 는 SIGIL, SIGTRAP 기본 값 으로 프로 세 스 를 유산 시 킬 수 있다 는 신호 가 있 습 니 다. SIGBRT, SIGBUS, SIGFPE, SIGIL, SIGIOT, SIGQUIT, SIGEGV, SIGTRAP, SIGXCPU, SIGXFSZ 기본 값 으로 프로 세 스 가 종 료 될 수 있다 는 신 호 는 SIGALRM, SIGUP, SIGINT, SIGKILL,SIGPIPE, SIGPOLL, SIGROF, SIGSYS, SIGTERM, SIGSR 1, SIGSR 2, SIGVTALRM 기본 값 으로 프로 세 스 가 정지 되 는 신 호 는 SIGTOP, SIGTSTP, SIGTTIN, SIGTOU 기본 프로 세 스 가 무시 하 는 신 호 는 SIGCHLD, SIGPWR, SIGGURG, SIGWINCH 입 니 다.
또한 SIGIO 는 SVR 4 에서 탈퇴 하고 4.3BSD 에 서 는 무시 합 니 다.SIGCONT 는 프로 세 스 가 끊 겼 을 때 계속 합 니 다. 그렇지 않 으 면 무시 하고 막 힐 수 없습니다.
신뢰 할 수 있 는 신호 와 신뢰 할 수 없 는 신호 의 테스트
#include <stdio.h>
#include <signal.h>

static volatile int signum = 0;

void sigme(int signo)
{          printf("signal received:%d
", signum++);          sleep(3); } int main() {          signal(SIGUSR1, sigme);          /*signal(SIGRTMIN, sigme);*/          while(1);          return 0; }

3 초 안에 이 프로그램 에 SIGUSR 1 을 보 내 면 첫 번 째 만 받 을 수 있 고 SIGRTMIN 은 이런 문제 가 없 을 것 이다.

좋은 웹페이지 즐겨찾기