신호 - Linux / Unix 명령

Linux는 POSIX의 신뢰할 수있는 신호 (이하 "표준 신호")와 POSIX 실시간 신호를 모두 지원합니다.

표준 신호

Linux 는 아래 나열된 표준 신호를 지원합니다. "신호"열에 표시된 것처럼 여러 신호 번호는 아키텍처에 따라 다릅니다. (세 개의 값이 주어지면 첫 번째 것은 보통 alpha와 sparc에 유효하고, 중간 값은 i386, ppc와 sh, 그리고 마지막 값은 mips에 유효합니다.

A -는 해당 아키텍처에서 신호가 없음을 나타냅니다.

테이블의 "동작"열에있는 항목은 다음과 같이 신호의 기본 동작을 지정합니다.

기간

기본 조치는 프로세스를 종료하는 것입니다.

Ign

기본 동작은 신호를 무시하는 것입니다.

핵심

기본 동작은 프로세스를 종료하고 코어를 덤프하는 것입니다.

중지

기본 조치는 프로세스를 중지하는 것입니다.

먼저 원래의 POSIX.1 표준에 설명 된 신호.

신호 동작 논평
또는 통제 과정의 죽음
SIGINT 2 기간 키보드에서 인터럽트
SIGQUIT 핵심 키보드에서 종료하십시오.
싸움 4 핵심 불법 지시
SIGABRT 6 핵심 중단 신호 (3) 중단
SIGFPE 8 핵심 부동 소수점 예외
알래스카 9 기간 신호를 죽인다.
SIGSEGV 11 핵심 유효하지 않은 메모리 참조
입식 13 기간 브로큰 파이프 : 독자가없는 파이프에 쓰기
SIGALRM 14 기간 경보 부터 타이머 신호 (2)
시걸 15 명 기간 종단 신호
SIGUSR1 30,10,16 기간 사용자 정의 신호 1
SIGUSR2 31,12,17 기간 사용자 정의 신호 2
SIGCHLD 20,17,18 Ign 아동이 중지되거나 종료 됨
시그널 19,18,25 중지 된 경우 계속하십시오.
SIGSTOP 17,19,23 중지 프로세스 중지
SIGTSTP 18,20,24 중지 tty에 중지 입력
소식통 21,21,26 중지 백그라운드 프로세스에 대한 tty 입력
시그이트 22,22,27 중지 백그라운드 프로세스 용 tty 출력

SIGKILLSIGSTOP 신호는 잡히 거나 차단하거나 무시할 수 없습니다.

다음은 POSIX.1 표준에는 없지만 SUSv2 및 SUSv3 / POSIX 1003.1-2001에 설명 된 신호입니다.

신호 동작 논평
SIGPOLL 기간 Pollable 이벤트 (Sys V). SIGIO의 동의어
SIGPROF 27,27,29 기간 프로파일 링 타이머가 만료되었습니다.
SIGSYS 12, -, 12 핵심 루틴에 대한 잘못된 인수 (SVID)
소식 5 핵심 추적 / 중단 점 트랩
시구르 16,23,21 Ign 소켓의 긴급 상태 (4.2 BSD)
SIGVTALRM 26,26,28 기간 가상 알람 시계 (4.2 BSD)
SIGXCPU 24, 24, 30 핵심 CPU 시간 제한 초과 (4.2 BSD)
SIGXFSZ 25,25,31 핵심 파일 크기 제한 초과 (4.2 BSD)

Linux 2.2 까지는 SIGSYS , SIGXCPU , SIGXFSZ 및 SPARC 및 MIPS 이외의 아키텍처에서 SIGBUS 의 기본 동작 인 SIGBUS 가 코어 덤프없이 프로세스를 종료하는 것이 었습니다. (다른 몇몇 유닉스에서는 SIGXCPUSIGXFSZ 의 기본 동작은 코어 덤프없이 프로세스를 종료하는 것입니다.) 리눅스 2.4는 이러한 신호에 대한 POSIX 1003.1-2001 요구 사항을 준수하여 코어 덤프로 프로세스를 종료합니다.

다음 여러 가지 다른 신호.

신호 동작 논평
시음 7, -, 7 기간
시끄러운 소리 -, 16, - 기간 코 프로세서에서 스택 오류 (사용되지 않음)
SIGIO 23,29,22 기간 I / O 가능 (4.2 BSD)
SIGCLD -, -, 18 Ign SIGCHLD의 동의어
SIGPWR 29,30,19 기간 정전 (시스템 V)
SIGINFO 29, -, - SIGPWR의 동의어
시그 (SIGLOST) -, -, - 기간 파일 잠금이 손실되었습니다.
SIGWINCH 28,28,20 Ign 창 크기 조정 신호 (4.3 BSD, Sun)
시끄러운 -, 31, - 기간 사용하지 않은 신호 (SIGSYS가됩니다)

(신호 29는 알파에서는 SIGINFO / SIGPWR 이지만 sparc에서는 SIGLOST 입니다.)

SIGEMT 는 POSIX 1003.1-2001에 명시되어 있지 않지만, 대부분의 다른 유닉스에는 나타나지 않는다. 디폴트 동작은 일반적으로 코어 덤프로 프로세스를 종료하는 것이다.

SIGPWR (POSIX 1003.1-2001에 명시되어 있지 않음)은 일반적으로 나타나는 다른 Unices에서는 기본적으로 무시됩니다.

SIGIO (POSIX 1003.1-2001에 명시되어 있지 않음)는 다른 여러 Units에서는 기본적으로 무시됩니다.

실시간 신호

리눅스 는 원래 POSIX.4 실시간 확장 (POSIX 1003.1-2001에 포함됨)에 정의 된대로 실시간 신호를 지원합니다. Linux는 32 ( SIGRTMIN )에서 63 ( SIGRTMAX )까지의 32 개의 실시간 신호를 지원합니다. (프로그램은 항상 실시간 신호의 범위가 Units에 따라 다르므로 표기법 SIGRTMIN + n을 사용하여 실시간 신호를 참조해야합니다.)

표준 신호와 달리 실시간 신호에는 미리 정의 된 의미가 없습니다. 즉, 실시간 신호 집합 전체를 응용 프로그램 정의 목적으로 사용할 수 있습니다. (그러나 LinuxThreads 구현은 처음 세 개의 실시간 신호를 사용합니다.)

처리되지 않은 실시간 신호의 기본 동작은 수신 프로세스를 종료하는 것입니다.

실시간 신호는 다음과 같이 구별됩니다.

  1. 실시간 신호의 여러 인스턴스를 대기시킬 수 있습니다. 대조적으로 표준 신호의 여러 인스턴스가 전달되는 동안 해당 신호가 현재 차단 된 경우 하나의 인스턴스 만 대기합니다.
  2. 시그널이 sigqueue (2)를 사용하여 보내 지면 , 동반 된 값 (정수 또는 포인터)이 시그널과 함께 전송 될 수 있습니다. 수신 프로세스가 SA_SIGACTION 플래그를 사용하여이 신호에 대한 처리기를 sigaction (2)에 설정하면 두 번째 인수로 처리기에 전달 된 siginfo_t 구조체의 si_value 필드를 통해이 데이터를 얻을 수 있습니다. 또한이 구조의 si_pidsi_uid 필드는 신호를 보내는 프로세스의 PID 및 실제 사용자 ID를 얻는 데 사용할 수 있습니다.
  3. 실시간 신호는 보장 된 순서로 전달됩니다. 동일한 유형의 여러 실시간 신호는 전송 된 순서대로 전달됩니다. 다른 실시간 신호가 프로세스로 보내지면 가장 낮은 번호의 신호로 시작하여 전달됩니다. (즉, 낮은 번호의 신호는 우선 순위가 가장 높습니다.)

프로세스에 대해 표준 신호와 실시간 신호가 모두 보류중인 경우 POSIX는 먼저 전달 된 신호를 지정하지 않은 상태로 둡니다. Linux는 다른 많은 구현과 마찬가지로이 경우 표준 신호에 우선 순위를 부여합니다.

POSIX에 따르면 구현시 적어도 _POSIX_SIGQUEUE_MAX (32) 개의 실시간 신호가 프로세스에 대기 할 수 있어야합니다. 그러나 프로세스 당 제한을 두지 않고 Linux는 모든 프로세스에 대해 대기중인 실시간 신호 수에 대해 시스템 전체 제한을 부과합니다.

이 제한은 / proc / sys / kernel / rtsig-max 파일을 통해 변경 될 수 있고 (권한으로) 변경할 수 있습니다. 관련 파일 인 / proc / sys / kernel / rtsig-max 를 사용하여 현재 대기중인 실시간 신호의 수를 확인할 수 있습니다.

준거법

POSIX.1

중요 : man 명령 ( % man )을 사용하여 특정 컴퓨터에서 명령이 어떻게 사용되는지보십시오.