man 7 signal
이것은 Linux 신호 정보에 대해 자주 살펴보고 싶은 Linux man-pages 프로젝트 의 편리한 비표준 맨 페이지입니다 .
버전 3.22는 다음과 같은 흥미로운 사항을 언급합니다.
SIGKILL 및 SIGSTOP 신호는 포착, 차단 또는 무시할 수 없습니다.
테이블을 포함합니다.
Signal Value Action Comment
----------------------------------------------------------------------
SIGHUP 1 Term Hangup detected on controlling terminal
or death of controlling process
SIGINT 2 Term Interrupt from keyboard
SIGQUIT 3 Core Quit from keyboard
SIGILL 4 Core Illegal Instruction
SIGABRT 6 Core Abort signal from abort(3)
SIGFPE 8 Core Floating point exception
SIGKILL 9 Term Kill signal
SIGSEGV 11 Core Invalid memory reference
SIGPIPE 13 Term Broken pipe: write to pipe with no
readers
SIGALRM 14 Term Timer signal from alarm(2)
SIGTERM 15 Term Termination signal
SIGUSR1 30,10,16 Term User-defined signal 1
SIGUSR2 31,12,17 Term User-defined signal 2
SIGCHLD 20,17,18 Ign Child stopped or terminated
SIGCONT 19,18,25 Cont Continue if stopped
SIGSTOP 17,19,23 Stop Stop process
SIGTSTP 18,20,24 Stop Stop typed at tty
SIGTTIN 21,21,26 Stop tty input for background process
SIGTTOU 22,22,27 Stop tty output for background process
Action
SIGQUIT에는 action Core
과 SIGINT 가 있기 때문에 SIGQUIT 와 SIGQUIT를 구별 하는 신호를 요약 Term
합니다.
작업은 동일한 문서에 설명되어 있습니다.
The entries in the "Action" column of the tables below specify the default disposition for each signal, as follows:
Term Default action is to terminate the process.
Ign Default action is to ignore the signal.
Core Default action is to terminate the process and dump core (see core(5)).
Stop Default action is to stop the process.
Cont Default action is to continue the process if it is currently stopped.
커널의 관점에서 SIGTERM과 SIGINT의 차이점을 볼 수 없습니다 Term
. 둘 다 동작이 있고 둘 다 잡힐 수 있기 때문입니다. 그것은 단지 "일반적인 사용 관례 구별"인 것 같습니다 :
- SIGINT는 터미널에서 CTRL-C를 수행 할 때 발생합니다.
- SIGTERM은
kill
일부 신호는 ANSI C이고 다른 신호는 그렇지 않습니다.
상당한 차이점은 다음과 같습니다.
- SIGINT 및 SIGTERM은 ANSI C이므로 더 이식 가능합니다.
- SIGQUIT 및 SIGKILL은
C99 초안 N1256 의 "7.14 신호 처리"섹션에 설명되어 있습니다 .
- 대화 형주의 신호의 SIGINT 수신
- SIGTERM 프로그램에 전송 된 종료 요청
따라서 SIGINT는 대화 형 Ctrl + C를위한 좋은 후보입니다.
POSIX 7
POSIX 7은 signal.h
헤더가 있는 신호를 문서화합니다 . https://pubs.opengroup.org/onlinepubs/9699919799/basedefs/signal.h.html
이 페이지에는 또한 우리가 이미 본 것들 중 일부를 언급하는 다음 관심 표가 있습니다 man 7 signal
.
Signal Default Action Description
SIGABRT A Process abort signal.
SIGALRM T Alarm clock.
SIGBUS A Access to an undefined portion of a memory object.
SIGCHLD I Child process terminated, stopped,
SIGCONT C Continue executing, if stopped.
SIGFPE A Erroneous arithmetic operation.
SIGHUP T Hangup.
SIGILL A Illegal instruction.
SIGINT T Terminal interrupt signal.
SIGKILL T Kill (cannot be caught or ignored).
SIGPIPE T Write on a pipe with no one to read it.
SIGQUIT A Terminal quit signal.
SIGSEGV A Invalid memory reference.
SIGSTOP S Stop executing (cannot be caught or ignored).
SIGTERM T Termination signal.
SIGTSTP S Terminal stop signal.
SIGTTIN S Background process attempting read.
SIGTTOU S Background process attempting write.
SIGUSR1 T User-defined signal 1.
SIGUSR2 T User-defined signal 2.
SIGTRAP A Trace/breakpoint trap.
SIGURG I High bandwidth data is available at a socket.
SIGXCPU A CPU time limit exceeded.
SIGXFSZ A File size limit exceeded.
BusyBox 초기화
BusyBox의 1.29.2 기본 reboot
명령은 SIGTERM을 프로세스로 보내고 1 초 동안 휴면 한 다음 SIGKILL을 보냅니다. 이것은 다른 배포판에서 일반적인 규칙 인 것 같습니다.
다음을 사용하여 BusyBox 시스템을 종료 할 때 :
reboot
init 프로세스에 신호를 보냅니다.
그런 다음 초기화 신호 처리기가 다음을 호출합니다.
static void run_shutdown_and_kill_processes(void)
{
/* Run everything to be run at "shutdown". This is done _prior_
* to killing everything, in case people wish to use scripts to
* shut things down gracefully... */
run_actions(SHUTDOWN);
message(L_CONSOLE | L_LOG, "The system is going down NOW!");
/* Send signals to every process _except_ pid 1 */
kill(-1, SIGTERM);
message(L_CONSOLE, "Sent SIG%s to all processes", "TERM");
sync();
sleep(1);
kill(-1, SIGKILL);
message(L_CONSOLE, "Sent SIG%s to all processes", "KILL");
sync();
/*sleep(1); - callers take care about making a pause */
}
터미널에 인쇄합니다.
The system is going down NOW!
Sent SIGTERM to all processes
Sent SIGKILL to all processes
여기에 최소한의 구체적인 예가 있습니다.
커널에서 보낸 신호