: 첫 번째 질문에 대답 SIGSTOP
하고 SIGKILL
심지어 응용 프로그램,하지만 다른 모든 신호 캔에 의해 체포 될 수 없다 SIGSEGV
. 이 속성은 디버깅에 유용합니다. 예를 들어 올바른 라이브러리 지원을 SIGSEGV
통해 스택 백 트레이스를 수신 하고 생성하여 해당 segfault가 발생한 위치를 표시 할 수 있습니다.
각 신호의 기능에 대한 공식 단어 (Linux의 경우) man 7 signal
는 Linux 명령 행에서 입력하여 사용할 수 있습니다 . http://linux.die.net/man/7/signal 은 동일한 정보를 가지고 있지만 테이블을 읽기가 더 어렵습니다.
그러나 신호에 대한 경험이 없으면 간단한 설명에서 실제로 수행하는 작업을 알기가 어렵 기 때문에 여기에 내 해석이 있습니다.
키보드에서 트리거
SIGINT
때 때 발생합니다 CTRL+C
.
SIGQUIT
에 의해 트리거되고 CTRL+\
코어를 덤프합니다.
SIGTSTP
때 때 프로그램을 일시 중단합니다 CTRL+Z
. 와 달리 SIGSTOP
, 잡을 수있어 프로그램 vi
을 중지하기 전에 터미널을 안전한 상태로 재설정 할 수있는 기회를 제공합니다 .
터미널 상호 작용
SIGHUP
( "hangup")은 프로그램이 실행되는 동안 xterm을 닫거나 터미널 연결을 끊을 때 발생합니다.
SIGTTIN
그리고 SIGTTOU
그것은 백그라운드에서 실행중인 동안이나 쓰기 터미널에 읽으려고하면 프로그램을 일시 중지합니다. 이를 SIGTTOU
위해서는 /dev/tty
기본 stdout뿐만 아니라에 프로그램을 작성해야한다고 생각합니다 .
CPU 예외에 의해 트리거
이것은 당신의 프로그램이 잘못된 것을 시도했다는 것을 의미합니다.
SIGILL
불법적이거나 알려지지 않은 프로세서 명령을 의미합니다. 예를 들어, 프로세서 I / O 포트에 직접 액세스하려는 경우에 발생할 수 있습니다.
SIGFPE
하드웨어 수학 오류가 있음을 의미합니다. 아마도 프로그램은 0으로 나누려고 시도했을 것입니다.
SIGSEGV
프로그램이 매핑되지 않은 메모리 영역에 액세스하려고 시도했음을 의미합니다.
SIGBUS
프로그램이 다른 방식으로 메모리에 잘못 액세스했음을 의미합니다. 이 요약에 대해서는 자세히 다루지 않겠습니다.
프로세스 상호 작용
SIGPIPE
파이프 판독기가 끝을 닫은 후 파이프에 쓰려고하면 발생합니다. 참조하십시오 man 7 pipe
.
SIGCHLD
생성 한 하위 프로세스가 종료되거나 일시 중단 SIGSTOP
되거나 이와 유사한 경우에 발생합니다.
자체 신호에 유용
SIGABRT
일반적으로 프로그램이 abort()
함수를 호출하여 발생하며 기본적으로 코어 덤프가 발생합니다. "공황 버튼"의 일종.
SIGALRM
alarm()
시스템 호출 로 인해 발생하며 , 이로 인해 커널 SIGALRM
은 지정된 시간 (초) 후에 프로그램에 a 를 전달합니다 . 참조 man 2 alarm
및 man 2 sleep
.
SIGUSR1
그리고 SIGUSR2
그러나 프로그램 좋아하는 데 사용됩니다. 프로세스 간 신호에 유용 할 수 있습니다.
관리자가 보냄
이들 신호는 일반적으로 통해 명령 프롬프트로부터 전송되는 kill
명령이나 fg
또는 bg
의 경우 SIGCONT
.
SIGKILL
및 SIGSTOP
unblockable 신호이다. 첫 번째는 항상 프로세스를 즉시 종료합니다. 두 번째는 프로세스를 일시 중단합니다.
SIGCONT
일시 중단 된 프로세스를 재개합니다.
SIGTERM
의 주목할만한 버전입니다 SIGKILL
.