本节关键字:Linux、C语言、常用信号
相关C库函数:printf、signal、kill
信号在Linux操作系统中是很重要的,信号的产生方式可以是来自键盘、由软件条件产生、调用硬件异常产生。来自系统函数调用产生、在Linux中一共有64种信号 ,Linux用户可以通过 kill -l 查看,如下:
[root@localhost ~]# uname -a
Linux localhost.localdomain 3.10.0-1160.71.1.el7.x86_64 #1 SMP Tue Jun 28 15:37:28 UTC 2022 x86_64 x86_64 x86_64 GNU/Linux
[root@localhost ~]# 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
[root@localhost ~]#
- 前32种称为不可靠信号,一般用于软件,不支持排队;
- 后32种称为可靠信号,一般用于硬件,支持排队。
信号值 | 信号宏 | 说明 |
---|---|---|
1 | SIGHUP | 进程立即关闭,终端连接(正常或非正常)结束时发出 |
2 | SIGINT | 程序中止信号,用于中止前台程序,输出 Ctrl+C 快捷键 |
3 | SIGQUIT | 程序退出信号,输出 Ctrl+\ 快捷键 |
6 | SIGABRT | 终止进程并产生core文件,调用abort函数时产生 |
7 | SIGBUS | 终止进程并产生core文件,硬件故障,进程访问非法地址 |
8 | SIGFPE | 发生致命的算术运算错误时发出,不仅包括浮点运算错误,还包括溢出及除数为 0 等其他所有的算术运算错误 |
9 | SIGKILL | 无条件立即结束程序的运行。本信号不能被阻塞、处理和忽略。般用于强制中止进程 |
10 | SIGUSR1 | 用户自定义信号,一般被用来告知应用程序重载配置文件 |
11 | SIGSEGV | 终止进程并产生core文件,硬件故障,进程访问非法地址 |
12 | SIGUSR2 | 用户自定义信号,作用和意义由用户自己定义 |
13 | SIGPIPE | 终止收到该信号的进程,涉及管道和socket通信。socket通信时,对端异常终止,我端写套接字时收到该信号 |
14 | SIGALRM | 时钟定时信号,计算的是实际的时间或时钟时间。alarm 函数使用该信号 |
15 | SIGTERM | 正常结束进程的信号,kill 命令的默认信号。如果进程已经发生了问题,那么这 个信号是无法正常中止进程的,这时我们才会尝试 SIGKILL 信号,也就是信号 9 |
17 | SIGCHLD | 子进程退出信号,如果父进程没有忽略该信号也没有处理该信号,则子进程退出后将形成僵尸进程。 |
18 | SIGCONT | 让暂停的进程恢复执行。本信号不能被阻断 |
19 | SIGSTOP | 暂停前台进程,相当于输入 Ctrl+Z 快捷键。本信号不能被阻断 |
补充说明:
- Term 表示终止进程
- Core 表示终止进程并 dump core
- Stop 挂起线程
- Cont 恢复挂起的线程