Điều này cho biết Linux đã gửi SIGTERM
cho quy trình của bạn. Điều này thường theo yêu cầu của một số quy trình khác (thông qua kill()
) nhưng cũng có thể được gửi bởi quá trình của bạn cho chính nó (sử dụng raise()
). Tín hiệu này yêu cầu tắt máy theo trật tự quy trình của bạn.
Nếu bạn cần một cheatsheet nhanh chóng của số tín hiệu, mở một shell bash và:
$ 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
Bạn có thể xác định người gửi bằng cách sử dụng một bộ xử lý tín hiệu thích hợp như:
#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;
}
Chú ý rằng bộ xử lý tín hiệu cũng bao gồm một cuộc gọi đến exit()
. Cũng có thể chương trình của bạn tiếp tục thực thi bằng cách bỏ qua tín hiệu, nhưng điều này không được khuyến nghị nói chung (nếu đó là người dùng thực hiện nó thì có khả năng nó sẽ được theo sau bởi SIGKILL nếu quy trình của bạn không thoát và bạn đã mất cơ hội để làm bất kỳ việc dọn dẹp nào).
Tín hiệu 15 thường là 'SIGTERM'. Ai đó đã nói với chương trình của bạn để chấm dứt. –