이것은 리눅스가 SIGTERM
을 프로세스에 전달했음을 나타냅니다. 이것은 보통 다른 프로세스 (kill()
경유)의 요청에 따라 이루어 지지만 자신의 프로세스에 의해 (raise()
을 사용하여) 보내질 수도 있습니다. 이 신호는 프로세스를 순서대로 종료하도록 요청합니다. 당신은 신호 번호의 빠른 쪽지가 필요한 경우
, bash 쉘을 열고 :
$ kill -l
1) SIGHUP 2) SIGINT 3) SIGQUIT 4) SIGILL
5) SIGTRAP 6) SIGABRT 7) SIGBUS 8) SIGFPE
9) SIGKILL 10) SIGUSR1 11) SIGSEGV 12) SIGUSR2
13) SIGPIPE 14) SIGALRM 15) SIGTERM 16) SIGSTKFLT
17) SIGCHLD 18) SIGCONT 19) SIGSTOP 20) SIGTSTP
21) SIGTTIN 22) SIGTTOU 23) SIGURG 24) SIGXCPU
25) SIGXFSZ 26) SIGVTALRM 27) SIGPROF 28) SIGWINCH
29) SIGIO 30) SIGPWR 31) SIGSYS 34) SIGRTMIN
35) SIGRTMIN+1 36) SIGRTMIN+2 37) SIGRTMIN+3 38) SIGRTMIN+4
39) SIGRTMIN+5 40) SIGRTMIN+6 41) SIGRTMIN+7 42) SIGRTMIN+8
43) SIGRTMIN+9 44) SIGRTMIN+10 45) SIGRTMIN+11 46) SIGRTMIN+12
47) SIGRTMIN+13 48) SIGRTMIN+14 49) SIGRTMIN+15 50) SIGRTMAX-14
51) SIGRTMAX-13 52) SIGRTMAX-12 53) SIGRTMAX-11 54) SIGRTMAX-10
55) SIGRTMAX-9 56) SIGRTMAX-8 57) SIGRTMAX-7 58) SIGRTMAX-6
59) SIGRTMAX-5 60) SIGRTMAX-4 61) SIGRTMAX-3 62) SIGRTMAX-2
63) SIGRTMAX-1 64) SIGRTMAX
당신은 보낸 사람을 확인할 수 있습니다처럼 적절한 신호 처리기를 사용하여 다음 그
이
#include <signal.h>
#include <stdio.h>
#include <stdlib.h>
void sigterm_handler(int signal, siginfo_t *info, void *_unused)
{
fprintf(stderr, "Received SIGTERM from process with pid = %u\n",
info->si_pid);
exit(0);
}
int main (void)
{
struct sigaction action = {
.sa_handler = NULL,
.sa_sigaction = sigterm_handler,
.sa_mask = 0,
.sa_flags = SA_SIGINFO,
.sa_restorer = NULL
};
sigaction(SIGTERM, &action, NULL);
sleep(60);
return 0;
}
공지 사항 신호 처리기에는 exit()
에 대한 호출도 포함됩니다. 신호를 무시하여 프로그램을 계속 실행하는 것도 가능하지만 일반적으로 권장하지는 않습니다 (사용자가 프로세스를 종료하면 SIGKILL이 이어질 가능성이 높습니다. 당신은 어떤 정리도 할 수있는 기회를 잃었습니다.)
신호 15는 대개 'SIGTERM'입니다. 누군가가 당신의 프로그램에 종료하라고 말했습니다. –