: 첫 번째 질문에 대답 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()함수를 호출하여 발생하며 기본적으로 코어 덤프가 발생합니다. "공황 버튼"의 일종.
SIGALRMalarm()시스템 호출 로 인해 발생하며 , 이로 인해 커널 SIGALRM은 지정된 시간 (초) 후에 프로그램에 a 를 전달합니다 . 참조 man 2 alarm및 man 2 sleep.
SIGUSR1그리고 SIGUSR2그러나 프로그램 좋아하는 데 사용됩니다. 프로세스 간 신호에 유용 할 수 있습니다.
관리자가 보냄
이들 신호는 일반적으로 통해 명령 프롬프트로부터 전송되는 kill명령이나 fg또는 bg의 경우 SIGCONT.
SIGKILL및 SIGSTOPunblockable 신호이다. 첫 번째는 항상 프로세스를 즉시 종료합니다. 두 번째는 프로세스를 일시 중단합니다.
SIGCONT 일시 중단 된 프로세스를 재개합니다.
SIGTERM의 주목할만한 버전입니다 SIGKILL.