kill -l可以看每个数字对应的信号
信号值9和15的区别:
kill命令默认是-15,代表的信号为SIGTERM,在结束此进程之前,允许此进程做一些清理工作
kill -9会直接杀死目标进程,不给其机会做清理工作
按键盘的 Ctrl+C时,会产生SIGINT信号(等价于kill -2)
#include <stdio.h>
#include <signal.h>
#include <stdlib.h>
void Get_CtrlC_handler(int sig) {
char c;
signal(sig, SIG_IGN);
printf("捕捉到Ctrl-C\n是否真要退出?[y/n] ");
c = getchar();
if (c == 'y' || c == 'Y')
exit(0);
else
signal(SIGINT, Get_CtrlC_handler);
getchar();
}
int main(void) {
signal(SIGINT, Get_CtrlC_handler);
while (1) {
sleep(1);
printf("已过去1秒,按Ctrl+C可退出\n");
}
return 0;
}
输出
已过去1秒,按Ctrl+C可退出
已过去1秒,按Ctrl+C可退出
已过去1秒,按Ctrl+C可退出
已过去1秒,按Ctrl+C可退出
^C捕捉到Ctrl-C
是否真要退出?[y/n] n
已过去1秒,按Ctrl+C可退出
已过去1秒,按Ctrl+C可退出
已过去1秒,按Ctrl+C可退出
^C捕捉到Ctrl-C
是否真要退出?[y/n] y
参考链接🔗:http://www.csl.mtu.edu/cs4411.ck/www/NOTES/signal/install.html