信号 signal

本文最后更新于:2023年12月5日 晚上

参考:https://www.cnblogs.com/maxgongzuo/p/6372898.html

信号配置 Signal dispositions

每个信号都有一个配置,决定信号传递到进程时的行为。每个信号都有一个默认的配置,指定信号的默认操作,至于最终具体的操作,肯定是基于它的默认操作的。

Term

默认操作是终止进程

Ign

默认操作是忽略进程

Core

默认操作是终止进程,并 core dump

core dump

当程序运行的过程中异常终止或崩溃,操作系统会将程序当时的内存状态记录下来,保存在一个文件中,这种行为就叫做 Core Dump(中文有的翻译成“核心转储”)。除了内存信息之外,还有些关键的程序运行状态也会同时 dump 下来,例如寄存器信息(包括程序指针、栈指针等)、内存管理信息、其他处理器和操作系统状态和信息。core dump 对于编程人员诊断和调试程序是非常有帮助的,因为对于有些程序错误是很难重现的,例如指针异常,而 core dump 文件可以再现程序出错时的情景。

如果没有进行 core dump 的相关设置,默认是不开启的。可以通过ulimit -c查看是否开启。如果输出为0,则没有开启,需要执行ulimit -c unlimited开启 core dump 功能。

Stop

默认操作是停止进程,后台休眠

Term 和 Stop 的区别:Term 终止进程,进程不存在;Stop 停止进程,进程还存在,可以通过 Cont 唤醒

Cont

默认操作是继续被停止的进程

标准信号 Standard signals

kill -ltrap -l可以查看所有的系统信号

lujinkai@Z510:~$ 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

编号 1-31 是标准信号,我们只研究这些,后面的不研究,常用信号说明:

信号名是 SIG 后面的部分,大部分信号都能被捕获,SIGKILL 和 SIGSTOP 不能被捕获。

1) HUP

默认操作 Term,可捕获

本信号在用户终端连接(正常或非正常)结束时发出, 通常是在终端的控制进程结束时, 通知同一 session 内的各个作业, 这时它们与控制终端不再关联。

登录 Linux 时,系统会分配给登录用户一个终端(Session)。在这个终端运行的所有程序,包括前台进程组和后台进程组,一般都属于这个 Session。当用户退出 Linux 登录时,前台进程组和后台有对终端输出的进程将会收到 SIGHUP 信号。这个信号的默认操作为终止进程,因此前台进 程组和后台有终端输出的进程就会中止。不过可以捕获这个信号,比如 wget 能捕获 SIGHUP 信号,并忽略它,这样就算退出了 Linux 登录,wget 也 能继续下载。

此外,对于与终端脱离关系的守护进程,这个信号用于通知它重新读取配置文件。

2) INT

默认操作 Term,可捕获

程序终止(interrupt)信号, 在用户键入 INTR 字符(通常是 Ctrl-C)时发出,用于通知前台进程组终止进程

3) QUIT

默认操作 Core,可捕获

和 SIGINT 类似, 但由 QUIT 字符(通常是 Ctrl-)来控制. 进程在因收到 SIGQUIT 退出时会 core dump, 在这个意义上类似于一个程序错误信号。

9) KILL

默认操作 Term,不可捕获

杀掉进程,KILL 和 TERM 的区别在于此信号不能被捕获、阻塞或忽略,所以一旦接收到此信号的进程只能终止,而 TERM 可以被捕获,进程在捕获到 TERM 信号后,可以执行自定义操作,例如通知子进程关闭,清理资源等操作。

15) TERM

默认操作 Term,可捕获

终止进程,是 kill 默认传递的信号。


信号 signal
http://blog.lujinkai.cn/运维/基础/shell脚本编程/信号 signal/
作者
像方便面一样的男子
发布于
2020年12月9日
更新于
2023年12月5日
许可协议