신호(IPC)

Signal (IPC)

신호는 종료 또는 오류 처리와 같은 특정 동작을 트리거하기 위해 실행 인 프로그램으로 전송되는 표준화된 메시지입니다.프로세스 간 통신(IPC)의 제한된 형태로, 일반적으로 Unix, Unix 유사 및 기타 POSIX 호환 운영 체제에서 사용됩니다.

신호는 이벤트를 알리기 위해 동일한 프로세스 내의 프로세스 또는 특정 스레드로 전송되는 비동기 알림입니다.신호의 일반적인 용도는 프로세스를 중단, 일시 중단, 종료 또는 종료하는 것입니다.신호는 1970년대 Bell Labs Unix에서 시작되었으며 나중에 POSIX 표준으로 지정되었습니다.

신호가 전송되면 운영체제는 신호를 전달하기 위해 대상 프로세스의 정상적인 실행 흐름을 중단합니다.모든 비원자 명령 중에 실행이 중단될 수 있습니다.프로세스가 신호 핸들러를 미리 등록한 경우 해당 루틴이 실행됩니다.그렇지 않으면 기본 신호 핸들러가 실행됩니다.

임베디드 프로그램은 알고리즘의 효율이 뛰어나기 때문에 프로세스 간 통신에 도움이 되는 신호를 발견할 수 있습니다.

신호는 인터럽트와 비슷하지만 인터럽트는 CPU에 의해 매개되고 커널에 의해 처리되며, 신호는 커널에 의해 매개되며(아마도 시스템 호출을 통해) 개별 [citation needed]프로세스에 의해 처리됩니다.커널은 인터럽트를 발생시킨 프로세스에 신호로서 전달할 수 있습니다(일반적으로 SIGSEGV, SIGBUS, SIGILLSIGFPE 등).

역사

버전 1 Unix에는 인터럽트, 종료 및 머신트랩을 포착하기 위한 개별 시스템콜이 있었어요버전 4에서는 모든 트랩이1개의 콜에 결합되어 있습니다. 버전 7에서는 각 번호가 매겨진 트랩이 심볼 이름을 받았습니다.버전 2에서는 킬이, 버전 5에서는 임의의 신호를 [1]송신할 수 있습니다.Bell Labs의 Plan 9는 신호를 노트로 대체하여 짧고 임의의 [2]문자열을 전송할 수 있게 했습니다.

신호 전송 중

kill(2) 시스템콜은 권한이 허용된 경우 지정된 프로세스에 지정된 신호를 전송합니다.마찬가지로 kill(1) 명령어를 사용하면 사용자는 프로세스에 신호를 보낼 수 있습니다.상승(3) 라이브러리 함수는 지정된 신호를 현재 프로세스로 전송합니다.

0으로 나누기, Segmentation Violation(SIGSEGV; 분할 위반), Floating Point Exception(SIGFPE; 부동 소수점 예외) 등의 예외코어 덤프를 발생시켜 프로그램을 종료합니다.

커널은 프로세스를 통해 이벤트를 통지하는 신호를 생성할 수 있습니다.예를 들어 SIGPIPE는 프로세스가 리더에 의해 닫힌 파이프에 쓸 때 생성됩니다.기본적으로는 프로세스가 종료되므로 셸 파이프라인을 구축할 때 편리합니다.

실행 중인 프로세스의 제어 단말기에 특정 키 조합을 입력하면 시스템은 특정 [3]신호를 전송합니다.

  • Ctrl+C(구형의 Unix, DEL에서는)는 INT 신호(「interrupt」, SIGINT)를 송신합니다.디폴트에서는, 이 때문에 프로세스가 종료됩니다.
  • Ctrl+Z는 TSTP 신호("terminal stop", SIGTSTP")를 전송합니다.기본적으로 이 경우 프로세스가 [4]실행을 중단합니다.
  • Ctrl-\은 CUIT 신호(SIGQUIT)를 전송합니다.기본적으로 이 경우 프로세스가 종료되고 코어가 덤프됩니다.
  • Ctrl+T(일부 UNIX에서는 지원되지 않음)는 INFO 신호(SIGINFO)를 전송합니다.기본적으로 명령어가 지원되는 경우 운영시스템에 실행 중인 [5]명령어에 대한 정보가 표시됩니다.

최신 운영 체제시스템과의 이러한 기본 키 조합은 stty 명령을 사용하여 변경할 수 있습니다.

신호 처리

신호 핸들러는 신호 (2) 또는 sigaction (2) 시스템 호출과 함께 설치할 수 있습니다.특정 신호에 대해 신호 핸들러가 설치되어 있지 않은 경우 기본 핸들러가 사용됩니다.그렇지 않으면 신호가 대행 수신되고 신호 핸들러가 호출됩니다.이 프로세스에서는 핸들러를 작성하지 않고 신호 무시(SIG_IGN)와 기본 신호 핸들러(SIG_DFL)의 2가지 기본 동작을 지정할 수도 있습니다.대행 수신 및 처리할 수 없는 신호는 SIGKILLSIGSTOP 두 가지가 있습니다.

리스크

신호 처리는 경주 조건에 취약합니다.신호가 비동기적이기 때문에 신호처리 루틴 실행 중에 다른 신호(동종이라도)를 프로세스에 전달할 수 있다.

sigprocmask (2) 콜은 신호의 전달을 차단 및 차단 해제하기 위해 사용할 수 있습니다.차단된 신호는 차단이 해제될 때까지 프로세스에 전달되지 않습니다.무시할 수 없는 신호(SIGKILL 및 SIGSTOP)는 차단할 수 없습니다.

신호로 인해 진행 중인 시스템콜이 중단되어 어플리케이션이 비투과적인 재기동을 관리할 수 있게 됩니다.

신호 핸들러는 에러 없음 변경, 신호 마스크 변경, 신호 배치 변경 및 기타 글로벌 프로세스 속성 변경 등 원치 않는 부작용을 초래하지 않는 방식으로 작성해야 합니다.malloc 또는 printf 등 내부 신호 핸들러에 재진입하지 않는 기능을 사용하는 것도 안전하지 않습니다.특히 POSIX 사양 및 Linux man page 신호(7)는 신호함수에서 직접 또는 간접적으로 호출되는 모든 시스템 함수가 비동기 신호 [6][7]안전해야 합니다.signal-safety(7) man 페이지에는 이러한 비동기 시그널 세이프 시스템 기능(실제로 시스템콜)의 리스트가 표시됩니다.그렇지 않으면 정의되지 않은 동작입니다.[8]간단히 몇 가지 설정을 권장합니다.volatile sig_atomic_t다른 [9]곳에서 테스트합니다.

대신 신호 핸들러는 신호를 에 넣고 즉시 복귀할 수 있습니다.메인 스레드는 이벤트루프 등 큐에서 신호가 수신될 때까지 "중단되지 않고" 계속됩니다.여기서 "Interrupted(중단되지 않음)"는 위에서 설명한 바와 같이 차단한 작업이 조기에 반환될 수 있으므로 재개해야 함을 의미합니다.신호는 메인 스레드 상의 큐에서 처리해야 합니다.워커 풀이 아닌 큐에서 처리하면 비동기성 문제가 다시 발생하기 때문입니다.단, 이러한 변수에 대한 단일 읽기 및 쓰기는 큐에 필요한 증분 또는 (fetch-and)-decrement가 아닌 atomic이 보장되므로 sig_atomic_t만으로 비동기 시그널을 안전하게 관리할 수 없습니다.따라서 실질적으로 처리될 때까지 sig_atomic_t를 사용하여 안전하게 큐잉할 수 있는 신호는 핸들러당1개뿐이에요

하드웨어 예외와의 관계

프로세스의 실행으로 인해 예를 들어 프로세스가 0으로 분할을 시도하거나 페이지 장애를 발생시키는 경우 하드웨어 예외가 생성될 수 있습니다.

Unix와 유사한 운영 체제에서는 이 이벤트가 자동으로 프로세서 컨텍스트를 변경하여 커널 예외 핸들러의 실행을 시작합니다.페이지 장애와 같은 일부 예외의 경우 커널에는 이벤트 자체를 완전히 처리하고 프로세스 실행을 재개하기에 충분한 정보가 있습니다.

그러나 다른 예외는 커널이 지능적으로 처리할 수 없으므로 예외 처리 작업을 장애 프로세스로 연기해야 합니다.이 지연은 커널이 현재 예외에 대응하는 신호를 프로세스에 보내는 신호 메커니즘을 통해 이루어집니다.예를 들어 프로세스가 x86 CPU에서 정수 나누기를 0으로 시도하면 나누기 오류 예외가 생성되어 커널이 프로세스에 SIGFPE 신호를 보냅니다.

마찬가지로 프로세스가 가상 주소 공간 외부에 있는 메모리주소에 액세스를 시도하면 커널은 SIGSEGV(세그멘테이션 위반 신호)를 통해 이 위반을 프로세스에 통지합니다.예외 유형은 아키텍처마다 다르기 때문에 신호 이름과 예외 간의 정확한 매핑은 CPU에 따라 달라집니다.

POSIX 신호

아래 목록은 단일 Unix 사양에 지정된 신호를 나타냅니다.모든 신호는 매크로 상수로 정의됩니다.<signal.h>헤더 파일매크로 상수의 이름은 "SIG" 프리픽스 뒤에 신호의 니모닉 이름으로 구성됩니다.

SIGABRT SIGIOT
"신호 중단", "신호 입력/출력 트랩"
SIGABRT 및 SIGIOT 신호는 중단, 즉 종료하도록 지시하는 프로세스로 전송됩니다.신호는 보통 C 표준 라이브러리의 기능을 호출할 때 프로세스 자체에 의해 시작되지만 다른 신호와 마찬가지로 외부에서 프로세스로 전송될 수 있습니다.
SIGALRM, SIGVTALRM SIGPROF
"Signal alarm", "Signal VT alarm", "Signal Profiling 타이머 알람"
SIGALRM, SIGVTALRM 및 SIGPROF 신호는 이전 알람 설정 기능에 대한 호출로 지정된 시간 제한(예:setitimer)가 경과합니다.SIGALRM 은, 리얼 타임 또는 클럭 시간이 경과했을 때에 송신됩니다.프로세스에서 사용되는 CPU 시간이 경과하면 SIGVTALRM이 전송됩니다.프로세스 및 프로세스를 대신하여 시스템에서 사용되는 CPU 시간이 경과하면(프로파일링 타이머가 만료되었을 때) SIGPROF가 전송됩니다.
시그버스
"신호버스"
SIGBUS 신호는 버스 에러가 발생했을 때 프로세스로 전송됩니다.예를 들어, 잘못된 메모리액세스 얼라인먼트나 존재하지 않는 물리 주소 등, 신호가 송신되는 상태가 됩니다.
시그널드
"시그널 차일드"
SIGCHLD 신호는 자녀처리, 중단 또는 중단 후 재개될 때 프로세스로 전송됩니다.신호의 일반적인 사용방법 중 하나는 운영시스템에 대해 명시적으로 호출하지 않고 자 프로세스가 종료된 후 자 프로세스가 사용하는 자원을 청소하도록 지시하는 것입니다.wait시스템 콜을 실행합니다.
시그널
"신호 계속"
SIGCONT 신호는 SIGSTOP 또는 SIGTSTP 신호에 의해 이전에 일시 중지된 프로세스를 계속(재시작)하도록 운영 체제에 지시합니다.이 신호의 중요한 용도 중 하나는 Unix 쉘에서의 작업 제어입니다.
시그니처
"신호 부동 소수점 오류"
SIGFPE 신호는 부동소수점 또는 정수 산술 하드웨어에서 예외적인 상태(반드시 오류는 아님)가 검출되었을 때 프로세스로 전송됩니다.여기에는 0으로 나눗셈, 부동 소수점 언더플로 또는 오버플로, 정수 오버플로, 잘못된 연산 또는 부정확한 계산이 포함될 수 있습니다.동작은 하드웨어에 따라 다를 수 있습니다.
한숨 쉬다
"신호 끊기"
SAHUP 신호는 제어 단자가 닫히면 프로세스로 전송됩니다.원래는 시리얼 회선의 드롭(행업)을 프로세스에 통지하도록 설계되어 있었습니다.현대 시스템에서 이 신호는 일반적으로 제어 의사 또는 가상 단말기가 [10]닫혀 있음을 의미합니다.많은 데몬(제어 단말기가 없는 경우)은 이 신호의 수신을 [11]종료가 아닌 컨피규레이션파일을 새로고침하여 로그파일을 플래시/재오픈하기 위한 요구로 해석합니다.nohup은 명령어가 신호를 무시하도록 하는 명령어입니다.
신호
"신호가 불법"
SIGILL 신호는 부정, 부정한 형식, 알 수 없는 또는 특권 명령을 실행하려고 하면 프로세스로 전송됩니다.
신호
"신호 인터럽트"
SIGINT 신호는 사용자가 프로세스를 중단하고 싶을 때 제어 단말기에 의해 프로세스로 전송됩니다.일반적으로 C+ 키를 누르면 시작되지만 일부 시스템에서는 "삭제" 문자 또는 "브레이크" 키를 사용할 [12]수 있습니다.
시그널
'시그널 킬'
SIGKILL 신호는 프로세스로 전송되어 즉시 종료됩니다(kill).SIGTERM 및 SIGINT와 달리 이 신호는 포착 또는 무시할 수 없으며 수신 프로세스에서는 이 신호를 수신한 후 청소를 수행할 수 없습니다.다음 예외가 적용됩니다.
  • 좀비 프로세스는 이미 비활성 상태이고 상위 프로세스가 프로세스를 수집하기를 기다리고 있기 때문에 중지할 수 없습니다.
  • 차단 상태인 프로세스는 다시 웨이크업할 때까지 중지되지 않습니다.
  • init 프로세스는 특별합니다.처리하고 싶지 않은 신호를 수신하지 않기 때문에 SIGKILL을 [13]무시할 수 있습니다.이 규칙의 예외는 init이 Linux에서 [14][15]ptrace 되어 있는 경우입니다.
  • 중단 없는 sleep 프로세스는 SIGKILL을 전송해도 종료되지 않을 수 있습니다.이는 일시적인 소프트웨어 문제를 해결하기 위해 UNIX 시스템을 재부팅해야 하는 몇 안 되는 사례 중 하나입니다.
SIGKILL은 SIGTERM에 대한 응답으로 자발적으로 종료되지 않는 경우 대부분의 시스템셧다운 절차에서 프로세스를 종료할 때 마지막 수단으로 사용됩니다.컴퓨터의 셧다운 순서를 고속화하기 위해, Mac OS X 10.6(일명 Snow Leopard)은 SIGKILL을 자신을 「클린」이라고 마크 한 애플리케이션에 송신해, 셧다운 시간을 단축해,[16] 악영향은 없는 것으로 생각됩니다.명령어killall -9Linux에서 실행했을 때도 비슷하지만 위험한 영향이 있습니다.프로그램이 저장되지 않은 데이터를 저장하지 않도록 합니다.다른 옵션도 있지만, 다른 옵션이 없는 경우 보다 안전한 SIGTERM 신호를 사용합니다.
시그파이프
"신호 파이프"
SIGPIPE 신호는 다른 쪽 끝에 연결된 프로세스 없이 파이프에 쓰기를 시도할 때 프로세스로 전송됩니다.
시그널
"시그널 폴"
명시적으로 감시되고 있는 파일 기술자에서 이벤트가 발생했을 [17]때 SIGPOLL 신호가 전송됩니다.커널이 호출자 대신 디스크립터를 폴링하기 때문에 효과적으로 사용하면 비동기 I/O 요청이 발생합니다.액티브 폴링 대신 사용할 수 있습니다.
SIGRTMIN에서 SIGRTMAX로
"신호 실시간 최소", "신호 실시간 최대"
SIGRTMIN에서 SIGRTMAX로의 신호는 사용자 정의 목적으로 사용됩니다.그것들은 실시간 신호입니다.
시그니처
"신호 종료"
SIGQUIT 신호는 사용자가 프로세스를 종료하고 코어 덤프를 실행하도록 요구하면 제어 단말기에 의해 프로세스로 전송됩니다.
시그니처
"신호 분할 위반"
SIGSEGV 신호는 잘못된 가상 메모리 참조 또는 분할 장애를 발생시키는 프로세스(, 분할 위반)[18]로 전송됩니다.
신호 정지
"신호정지"
SIGSTOP 신호는 나중에 재개하기 위해 프로세스를 중지하도록 운영 체제에 지시합니다.
시그시스
"시스템 호출 신호"
SIGSYS 신호는 잘못된 인수를 시스템콜에 전달하면 프로세스로 전송됩니다.실제로는 애플리케이션이 라이브러리(libc 등)에 의존하여 호출하기 때문에 이러한 종류의 신호는 거의 발생하지 않습니다.SIGSYS는 제한하도록 설정된 Linux Seccomp 보안 규칙을 위반하는 응용 프로그램에서 수신될 수 있습니다.SIGSYS는 외부 시스템 호출(예를 들어 Linux 상의 Windows 시스템 호출 [19]에뮬레이트)에도 사용할 수 있습니다.
시그널
"신호 종료"
SIGTERM 신호는 프로세스로 전송되어 종료를 요구합니다.SIGKILL 신호와는 달리 프로세스에 의해 포착 및 해석되거나 무시될 수 있습니다.이를 통해 적절한 종료 릴리스를 수행하고 필요에 따라 상태를 저장할 수 있습니다.SIGINT는 SIGTERM과 거의 동일합니다.
SIGTSTP
"신호 터미널 정지"
SIGTSTP 신호는 제어 단말기에 의해 프로세스로 전송되어 정지(단말기 정지)를 요구합니다.일반적으로 사용자가 +Z를 누르면 시작됩니다.SIGSTOP과 달리 이 프로세스는 신호 핸들러를 등록하거나 무시할 수 있습니다.
SIGTIN 및 SIGTOU
SIGTTIN 신호와 SIGTTOU 신호는 백그라운드에서 tty에서 각각 읽기 또는 쓰기를 시도할 때 프로세스로 전송됩니다.일반적으로 이러한 신호는 작업 제어 중인 프로세스에서만 수신됩니다. 데몬에는 제어 단자가 없으므로 이러한 신호를 수신해서는 안 됩니다.
시그널 트랩
"신호 트랩"
SIGTRAP 신호는 예외(또는 트랩)가 발생했을 때 프로세스로 전송됩니다.예를 들어 특정 기능이 실행되거나 특정 변수가 값이 변경되었을 때 등 디버거가 통지하도록 요청한 상태입니다.
시그그
"신호 긴급"
SIGURG 신호는 소켓에 긴급 데이터 또는 대역 외 데이터를 읽을 수 있는 경우 프로세스로 전송됩니다.
SIGUSR1SIGUSR2
"시그널 사용자 1", "시그널 사용자 2"
SIGUSR1 및 SIGUSR2 신호는 프로세스로 전송되어 사용자 정의 상태를 나타냅니다.
SIGXCPU
"신호가 CPU를 초과했습니다."
SIGXCPU 신호는 사용자가 미리 설정한 [20]값을 초과하는 기간 동안 CPU를 모두 사용했을 때 프로세스로 전송됩니다.SIGXCPU 신호가 도달하면 SIGKILL 신호를 사용하여 운영시스템에 의해 종료되기 전에 수신 프로세스가 중간 결과를 신속하게 저장하고 정상적으로 종료할 수 있습니다.
SIGXFSZ
"신호 초과 파일 크기"
SIGXFSZ 신호는 파일이 최대 허용 크기초과하면 프로세스로 전송됩니다.
시그니처
"신호 창 변경"
SIGWINCH 신호는 제어 단말기의 크기가 변경되면 프로세스로 전송됩니다( [21]변경).

디폴트 액션

프로세스는 착신 POSIX 신호를 처리하는 방법을 정의할 수 있습니다.프로세스가 신호의 동작을 정의하지 않으면 해당 신호의 기본 핸들러가 사용됩니다.다음 표에 FreeBSD, OpenBSD, Linux 등 POSIX 준거 UNIX 시스템의 기본 액션을 나타냅니다.

신호. 휴대용
번호
디폴트 액션 묘사
SIGABRT 6 종료(코어 덤프) 프로세스 중단 신호
시그널 14 종료 자명종
시그버스 종료(코어 덤프) 메모리 개체의 정의되지 않은 부분에 대한 액세스
시그널드 무시 하위 프로세스가 종료, 중지 또는 계속됨
시그널 계속하다. 중지된 경우 실행을 계속합니다.
시그니처 8 종료(코어 덤프) 잘못된 산술 연산
한숨 쉬다 1 종료 전화끊어
신호 4 종료(코어 덤프) 잘못된 지시
신호 2 종료 단자 인터럽트 신호
시그널 9 종료 죽이기(잡거나 무시할 수 없음)
시그파이프 13 종료 읽을 사람이 없는 파이프에 쓰다.
시그널 종료 폴링 가능한 이벤트
시그니처 종료 프로파일링 타이머가 만료되었습니다.
시그니처 3 종료(코어 덤프) 단말기 종료 신호
시그니처 11 종료(코어 덤프) 잘못된 메모리 참조
신호 정지 이제 그만 실행 중지(잡거나 무시할 수 없음)
시그시스 종료(코어 덤프) 잘못된 시스템 호출
시그널 15 종료 종단 신호
시그널 트랩 5 종료(코어 덤프) 트레이스/브레이크 포인트트랩
SIGTSTP 이제 그만 단자 정지 신호
시그틴 이제 그만 백그라운드 프로세스가 읽기를 시도하고 있습니다.
시그토우 이제 그만 백그라운드 프로세스가 쓰기를 시도하고 있습니다.
SIGUSR1 종료 사용자 정의 신호 1
SIGUSR2 종료 사용자 정의 신호 2
시그그 무시 아웃 오브 밴드 데이터는 소켓에서 사용 가능
시그널 종료 가상 타이머가 만료됨
SIGXCPU 종료(코어 덤프) CPU 시간 제한 초과
SIGXFSZ 종료(코어 덤프) 파일 크기 제한을 초과했습니다.
시그니처 무시 터미널 창 크기 변경됨
휴대 전화 번호:
대부분의 신호의 경우 해당 신호 번호가 구현 정의됩니다.이 컬럼에는 POSIX [22]표준으로 지정된 번호가 나열됩니다.
액션 설명:
[Terminate] : 프로세스의 비정상적인 종료.프로세스는 wait() 및 waitpid()에 사용할 수 있게 된 상태가 지정된 신호에 의한 비정상적인 종료를 나타내는 것을 제외하고 _exit()의 모든 결과로 종료됩니다.
Terminate(코어 덤프): 프로세스의 비정상적인 종료.또, 코어 파일의 작성 등, 실장 정의의 비정상 종료 액션이 발생할 가능성이 있습니다.
[Ignore] : 신호를 무시합니다.
[Stop] : 프로세스를 정지(또는 일시정지)합니다.
[Continue] : 정지된 경우 프로세스를 계속합니다.정지되지 않은 경우 신호를 무시합니다.

기타 신호

POSIX 사양에는 다음 신호가 지정되어 있지 않습니다.단, 다양한 시스템에서 사용되는 경우가 있습니다.

시그넷
SIGEMT 신호는 에뮬레이터 트랩이 발생하면 프로세스로 전송됩니다.
SIGINFO
SIGINFO 신호는 제어 단말기로부터 상태(info) 요구가 수신되면 프로세스로 전송됩니다.
SIGPWR
SIGPWR 신호는 시스템에 전원 장애가 발생했을 때 프로세스로 전송됩니다.
인식되지 않다
파일 잠금이 손실되면 SIGLOST 신호가 프로세스로 전송됩니다.
SIGTKFLT
SIGSTKFLT 신호는 코프로세서에 스택 장애가 발생했을 때 프로세스로 전송됩니다(스택이 비어 있을 때 팝핑되거나 가득 찼을 때 푸시됨).[23]정의되어 있지만 Linux에서는 사용되지 않습니다.[24]x87 코프로세서 스택 장애로 인해 SIGFPE가 생성됩니다.
사용되지 않다
SIGUNUSED 신호는 미사용 시스템콜 번호로 시스템콜이 발신되면 프로세스로 전송됩니다.이는 [23]대부분의 아키텍처에서 SIGSYS와 동의어입니다.
시그널드
SIGCLD 신호는 SIGCLD와 [23]동일합니다.

「 」를 참조해 주세요.

레퍼런스

  1. ^ McIlroy, M. D. (1987). A Research Unix reader: annotated excerpts from the Programmer's Manual, 1971–1986 (PDF) (Technical report). CSTR. Bell Labs. 139.
  2. ^ Gagliardi, Pietro. "C Programming in Plan 9 from Bell Labs". doc.cat-v.org. Retrieved 22 January 2022.
  3. ^ "Termination Signals". The GNU C Library).
  4. ^ "Job Control Signals". The GNU C Library.
  5. ^ "Miscellaneous Signals". The GNU C Library.
  6. ^ "The Open Group Base Specifications Issue 6, IEEE Std 1003.1, 2004 Edition: System Interfaces Chapter 2". pubs.opengroup.org. Retrieved 20 December 2020.
  7. ^ "signal(7) - Linux manual page". man7.org. Retrieved 20 December 2020.
  8. ^ "signal-safety(7) - Linux manual page". man7.org. Retrieved 20 December 2020.
  9. ^ "The Open Group Base Specifications Issue 6, IEEE Std 1003.1, 2004 Edition: <signal.h>". pubs.opengroup.org. Retrieved 20 December 2020.
  10. ^ Michael Kerrisk (25 July 2009). "signal(7)". Linux Programmer's Manual (version 3.22). The Linux Kernel Archives. Retrieved 23 September 2009.
  11. ^ "perlipc(1)". Perl Programmers Reference Guide, version 5.18. perldoc.perl.org - Official documentation for the Perl programming language. Retrieved 21 September 2013.
  12. ^ "Proper handling of SIGINT and SIGQUIT". Retrieved 6 October 2012.
  13. ^ https://manpages.ubuntu.com/manpages/zesty/man2/kill.2.html 섹션 주의사항
  14. ^ "SIGKILL init process (PID 1)". Stack Overflow.
  15. ^ "Can root kill init process?". Unix & Linux Stack Exchange.
  16. ^ "Mac Dev Center: What's New in Mac OS X: Mac OS X v10.6". 28 August 2009. Retrieved 18 November 2017.
  17. ^ "ioctl - controls a STREAM device". POSIX system call specification. The Open Group. Retrieved 19 June 2015.
  18. ^ "What is a "segmentation violation"?". support.microfocus.com. Retrieved 22 November 2018.
  19. ^ "Syscall User Dispatch – The Linux Kernel documentation". kernel.org. Retrieved 11 February 2021.
  20. ^ "getrlimit, setrlimit - control maximum resource consumption". POSIX system call specification. The Open Group. Retrieved 10 September 2009.
  21. ^ Clausecker, Robert (19 June 2017). "0001151: Introduce new signal SIGWINCH and functions tcsetsize(), tcgetsize() to get/set terminal window size". Austin Group Defect Tracker. Austin Group. Retrieved 12 October 2017. Accepted As Marked
  22. ^ "IEEE Std 1003.1-2017 - kill". IEEE, Open Group. The correspondence between integer values and the sig value used is shown in the following list. The effects of specifying any signal_number other than those listed below are undefined.
  23. ^ a b c "signal(7) — Linux manual pages". manpages.courier-mta.org. Retrieved 22 November 2018.
  24. ^ "Linux 3.0 x86_64: When is SIGSTKFLT raised?". Stack Overflow.

외부 링크