SIGINT:程序终止信号。当用户按下CRTL+C时通知前台进程组终止进程 或者 kill -2 <pid> 触发。
SIGTERM:程序结束信号, 可以使用 kill -15 <pid> 触发
SIGKILL:用来立即结束程序的运行。可以使用kill -9 <pid> 触发
SIGTERM和SIGKILL的区别:
SIGTERM信号是可以被捕获的,因此可以尝试block,或者忽视,但是SIGKILL不能。
下面写了一个简单的例子来佐证这个事情 sig_test.cpp:
#include <stdlib.h>
#include <signal.h>
#include <unistd.h>
#include <stdio.h>
void term_handler(int seg) {
printf("sig term handler %d\n", seg);
}
void int_handler(int seg) {
printf("sig int handler %d\n", seg);
}
void kill_handler(int seg) {
printf("sig kill handler %d\n", seg);
}
int main() {
sigset_t sigset;
struct sigaction term_act;
struct sigaction int_act;
struct sigaction kill_act;
sigemptyset(&sigset);
sigad