Linux信号列表详解

Linux信号列表详解

2023年8月2日发(作者:)

Linux信号列表详解我们运⾏如下命令,可看到Linux⽀持的信号列表:~$ kill -l1) SIGHUP 2) SIGINT 3) SIGQUIT 4) SIGILL5) SIGTRAP 6) SIGABRT 7) SIGBUS 8) SIGFPE9) SIGKILL 10) SIGUSR1 11) SIGSEGV 12) SIGUSR213) SIGPIPE 14) SIGALRM 15) SIGTERM 17) SIGCHLD18) SIGCONT 19) SIGSTOP 20) SIGTSTP 21) SIGTTIN22) SIGTTOU 23) SIGURG 24) SIGXCPU 25) SIGXFSZ26) SIGVTALRM 27) SIGPROF 28) SIGWINCH 29) SIGIO30) SIGPWR 31) SIGSYS 34) SIGRTMIN 35) SIGRTMIN+136) SIGRTMIN+2 37) SIGRTMIN+3 38) SIGRTMIN+4 39) SIGRTMIN+540) SIGRTMIN+6 41) SIGRTMIN+7 42) SIGRTMIN+8 43) SIGRTMIN+944) SIGRTMIN+10 45) SIGRTMIN+11 46) SIGRTMIN+12 47) SIGRTMIN+1348) SIGRTMIN+14 49) SIGRTMIN+15 50) SIGRTMAX-14 51) SIGRTMAX-1352) SIGRTMAX-12 53) SIGRTMAX-11 54) SIGRTMAX-10 55) SIGRTMAX-956) SIGRTMAX-8 57) SIGRTMAX-7 58) SIGRTMAX-6 59) SIGRTMAX-560) SIGRTMAX-4 61) SIGRTMAX-3 62) SIGRTMAX-2 63) SIGRTMAX-164) SIGRTMAX列表中,编号为1 ~ 31的信号为传统UNIX⽀持的信号,是不可靠信号(⾮实时的),编号为32 ~ 63的信号是后来扩充的,称做可靠信号(实时信号)。不可靠信号和可靠信号的区别在于前者不⽀持排队,可能会造成信号丢失,⽽后者不会。下⾯我们对编号⼩于SIGRTMIN的信号进⾏讨论。1) SIGHUP本信号在⽤户终端连接(正常或⾮正常)结束时发出, 通常是在终端的控制进程结束时, 通知同⼀session内的各个作业, 这时它们与控制终端不再关联。登录Linux时,系统会分配给登录⽤户⼀个终端(Session)。在这个终端运⾏的所有程序,包括前台进程组和后台进程组,⼀般都属于这个 Session。当⽤户退出Linux登录时,前台进程组和后台有对终端输出的进程将会收到SIGHUP信号。这个信号的默认操作为终⽌进程,因此前台进 程组和后台有终端输出的进程就会中⽌。不过可以捕获这个信号,⽐如wget能捕获SIGHUP信号,并忽略它,这样就算退出了Linux登录,wget也 能继续下载。此外,对于与终端脱离关系的守护进程,这个信号⽤于通知它重新读取配置⽂件。2) SIGINT程序终⽌(interrupt)信号, 在⽤户键⼊INTR字符(通常是Ctrl-C)时发出,⽤于通知前台进程组终⽌进程。3) SIGQUIT和SIGINT类似, 但由QUIT字符(通常是Ctrl-)来控制. 进程在因收到SIGQUIT退出时会产⽣core⽂件, 在这个意义上类似于⼀个程序错误信号。4) SIGILL执⾏了⾮法指令. 通常是因为可执⾏⽂件本⾝出现错误, 或者试图执⾏数据段. 堆栈溢出时也有可能产⽣这个信号。5) SIGTRAP由断点指令或其它trap指令产⽣. 由debugger使⽤。6) SIGABRT调⽤abort函数⽣成的信号。7) SIGBUS⾮法地址, 包括内存地址对齐(alignment)出错。⽐如访问⼀个四个字长的整数, 但其地址不是4的倍数。它与SIGSEGV的区别在于后者是由于对合法存储地址的⾮法访问触发的(如访问不属于⾃⼰存储空间或只读存储空间)。8) SIGFPE在发⽣致命的算术运算错误时发出. 不仅包括浮点运算错误, 还包括溢出及除数为0等其它所有的算术的错误。9) SIGKILL⽤来⽴即结束程序的运⾏. 本信号不能被阻塞、处理和忽略。如果管理员发现某个进程终⽌不了,可尝试发送这个信号。10) SIGUSR1留给⽤户使⽤11) SIGSEGV试图访问未分配给⾃⼰的内存, 或试图往没有写权限的内存地址写数据.12) SIGUSR2留给⽤户使⽤13) SIGPIPE管道破裂。这个信号通常在进程间通信产⽣,⽐如采⽤FIFO(管道)通信的两个进程,读管道没打开或者意外终⽌就往管道写,写进程会收到SIGPIPE信号。此外⽤Socket通信的两个进程,写进程在写Socket的时候,读进程已经终⽌。14) SIGALRM时钟定时信号, 计算的是实际的时间或时钟时间. alarm函数使⽤该信号.15) SIGTERM程序结束(terminate)信号, 与SIGKILL不同的是该信号可以被阻塞和处理。通常⽤来要求程序⾃⼰正常退出,shell命令kill缺省产⽣这个信号。如果进程终⽌不了,我们才会尝试SIGKILL。17) SIGCHLD⼦进程结束时, ⽗进程会收到这个信号。如果⽗进程没有处理这个信号,也没有等待(wait)⼦进程,⼦进程虽然终⽌,但是还会在内核进程表中占有表项,这时的⼦进程称为僵⼫进程。这种情 况我们应该避免(⽗进程或者忽略SIGCHILD信号,或者捕捉它,或者wait它派⽣的⼦进程,或者⽗进程先终⽌,这时⼦进程的终⽌⾃动由init进程 来接管)。18) SIGCONT让⼀个停⽌(stopped)的进程继续执⾏. 本信号不能被阻塞. 可以⽤⼀个handler来让程序在由stopped状态变为继续执⾏时完成特定的⼯作. 例如, 重新显⽰提⽰符19) SIGSTOP停⽌(stopped)进程的执⾏. 注意它和terminate以及interrupt的区别:该进程还未结束, 只是暂停执⾏. 本信号不能被阻塞, 处理或忽略.20) SIGTSTP停⽌进程的运⾏, 但该信号可以被处理和忽略. ⽤户键⼊SUSP字符时(通常是Ctrl-Z)发出这个信号21) SIGTTIN当后台作业要从⽤户终端读数据时, 该作业中的所有进程会收到SIGTTIN信号. 缺省时这些进程会停⽌执⾏.22) SIGTTOU类似于SIGTTIN, 但在写终端(或修改终端模式)时收到.23) SIGURG有”紧急”数据或out-of-band数据到达socket时产⽣.24) SIGXCPU超过CPU时间资源限制. 这个限制可以由getrlimit/setrlimit来读取/改变。25) SIGXFSZ当进程企图扩⼤⽂件以⾄于超过⽂件⼤⼩资源限制。26) SIGVTALRM虚拟时钟信号. 类似于SIGALRM, 但是计算的是该进程占⽤的CPU时间.27) SIGPROF类似于SIGALRM/SIGVTALRM, 但包括该进程⽤的CPU时间以及系统调⽤的时间.28) SIGWINCH窗⼝⼤⼩改变时发出.29) SIGIO⽂件描述符准备就绪, 可以开始进⾏输⼊/输出操作.30) SIGPWRPower failure31) SIGSYS⾮法的系统调⽤。在以上列出的信号中,程序不可捕获、阻塞或忽略的信号有:SIGKILL,SIGSTOP不能恢复⾄默认动作的信号有:SIGILL,SIGTRAP默认会导致进程流产的信号有:SIGABRT,SIGBUS,SIGFPE,SIGILL,SIGIOT,SIGQUIT,SIGSEGV,SIGTRAP,SIGXCPU,SIGXFSZ默认会导致进程退出的信号有:SIGALRM,SIGHUP,SIGINT,SIGKILL,SIGPIPE,SIGPOLL,SIGPROF,SIGSYS,SIGTERM,SIGUSR1,SIGUSR2,SIGVTALRM默认会导致进程停⽌的信号有:SIGSTOP,SIGTSTP,SIGTTIN,SIGTTOU默认进程忽略的信号有:SIGCHLD,SIGPWR,SIGURG,SIGWINCH此外,SIGIO在SVR4是退出,在4.3BSD中是忽略;SIGCONT在进程挂起时是继续,否则是忽略,不能被阻塞。以下是其它⽹友的补充:SIGHUP 终⽌进程 终端线路挂断SIGINT 终⽌进程 中断进程SIGQUIT 建⽴CORE⽂件终⽌进程,并且⽣成core⽂件SIGILL 建⽴CORE⽂件 ⾮法指令SIGTRAP 建⽴CORE⽂件 跟踪⾃陷SIGBUS 建⽴CORE⽂件 总线错误SIGSEGV 建⽴CORE⽂件 段⾮法错误SIGFPE 建⽴CORE⽂件 浮点异常SIGIOT 建⽴CORE⽂件 执⾏I/O⾃陷SIGKILL 终⽌进程 杀死进程SIGPIPE 终⽌进程 向⼀个没有读进程的管道写数据SIGALARM 终⽌进程 计时器到时SIGTERM 终⽌进程 软件终⽌信号SIGSTOP 停⽌进程 ⾮终端来的停⽌信号SIGTSTP 停⽌进程 终端来的停⽌信号SIGCONT 忽略信号 继续执⾏⼀个停⽌的进程SIGURG 忽略信号 I/O紧急信号SIGIO 忽略信号 描述符上可以进⾏I/OSIGCHLD 忽略信号 当⼦进程停⽌或退出时通知⽗进程SIGTTOU 停⽌进程 后台进程写终端SIGTTIN 停⽌进程 后台进程读终端SIGXGPU 终⽌进程 CPU时限超时SIGXFSZ 终⽌进程 ⽂件长度过长SIGWINCH 忽略信号 窗⼝⼤⼩发⽣变化SIGPROF 终⽌进程 统计分布图⽤计时器到时SIGUSR1 终⽌进程 ⽤户定义信号1SIGUSR2 终⽌进程 ⽤户定义信号2SIGVTALRM 终⽌进程 虚拟计时器到时1) SIGHUP 本信号在⽤户终端连接(正常或⾮正常)结束时发出, 通常是在终端的控

制进程结束时, 通知同⼀session内的各个作业, 这时它们与控制终端

不再关联.

2) SIGINT 程序终⽌(interrupt)信号, 在⽤户键⼊INTR字符(通常是Ctrl-C)时发出

3) SIGQUIT 和SIGINT类似, 但由QUIT字符(通常是Ctrl-)来控制. 进程在因收到

SIGQUIT退出时会产⽣core⽂件, 在这个意义上类似于⼀个程序错误信

号.

4) SIGILL 执⾏了⾮法指令. 通常是因为可执⾏⽂件本⾝出现错误, 或者试图执⾏

数据段. 堆栈溢出时也有可能产⽣这个信号.

5) SIGTRAP 由断点指令或其它trap指令产⽣. 由debugger使⽤.

6) SIGABRT 程序⾃⼰发现错误并调⽤abort时产⽣.

6) SIGIOT 在PDP-11上由iot指令产⽣, 在其它机器上和SIGABRT⼀样.

7) SIGBUS ⾮法地址, 包括内存地址对齐(alignment)出错. eg: 访问⼀个四个字长

的整数, 但其地址不是4的倍数.

8) SIGFPE 在发⽣致命的算术运算错误时发出. 不仅包括浮点运算错误, 还包括溢

出及除数为0等其它所有的算术的错误.

9) SIGKILL ⽤来⽴即结束程序的运⾏. 本信号不能被阻塞, 处理和忽略.

10) SIGUSR1 留给⽤户使⽤ 11) SIGSEGV 试图访问未分配给⾃⼰的内存, 或试图往没有写权限的内存地址写数据.

12) SIGUSR2 留给⽤户使⽤

13) SIGPIPE Broken pipe

14) SIGALRM 时钟定时信号, 计算的是实际的时间或时钟时间. alarm函数使⽤该

信号.

15) SIGTERM 程序结束(terminate)信号, 与SIGKILL不同的是该信号可以被阻塞和

处理. 通常⽤来要求程序⾃⼰正常退出. shell命令kill缺省产⽣这

个信号.

17) SIGCHLD ⼦进程结束时, ⽗进程会收到这个信号.

18) SIGCONT 让⼀个停⽌(stopped)的进程继续执⾏. 本信号不能被阻塞. 可以⽤

⼀个handler来让程序在由stopped状态变为继续执⾏时完成特定的

⼯作. 例如, 重新显⽰提⽰符

19) SIGSTOP 停⽌(stopped)进程的执⾏. 注意它和terminate以及interrupt的区别:

该进程还未结束, 只是暂停执⾏. 本信号不能被阻塞, 处理或忽略.

20) SIGTSTP 停⽌进程的运⾏, 但该信号可以被处理和忽略. ⽤户键⼊SUSP字符时

(通常是Ctrl-Z)发出这个信号

21) SIGTTIN 当后台作业要从⽤户终端读数据时, 该作业中的所有进程会收到SIGTTIN

信号. 缺省时这些进程会停⽌执⾏.

22) SIGTTOU 类似于SIGTTIN, 但在写终端(或修改终端模式)时收到.

23) SIGURG 有"紧急"数据或out-of-band数据到达socket时产⽣.

24) SIGXCPU 超过CPU时间资源限制. 这个限制可以由getrlimit/setrlimit来读取/

改变

25) SIGXFSZ 超过⽂件⼤⼩资源限制.

26) SIGVTALRM 虚拟时钟信号. 类似于SIGALRM, 但是计算的是该进程占⽤的CPU时间.

27) SIGPROF 类似于SIGALRM/SIGVTALRM, 但包括该进程⽤的CPU时间以及系统调⽤的

时间.

28) SIGWINCH 窗⼝⼤⼩改变时发出.

29) SIGIO ⽂件描述符准备就绪, 可以开始进⾏输⼊/输出操作.

30) SIGPWR Power failure有 两个信号可以停⽌进程:SIGTERM和SIGKILL。 SIGTERM⽐较友好,进程能捕捉这个信号,根据您的需要来关闭程序。在关闭程序之前,您可以结束打开的记录⽂件和完成正在做的任务。在某些情况下,假 如进程正在进⾏作业⽽且不能中断,那么进程可以忽略这个SIGTERM信号。对于SIGKILL信号,进程是不能忽略的。这是⼀个 “我不管您在做什么,⽴刻停⽌”的信号。假如您发送SIGKILL信号给进程,Linux就将进程停⽌在那⾥。

发布者:admin,转转请注明出处:http://www.yc00.com/news/1690957060a472683.html

相关推荐

发表回复

评论列表(0条)

  • 暂无评论

联系我们

400-800-8888

在线咨询: QQ交谈

邮件:admin@example.com

工作时间:周一至周五,9:30-18:30,节假日休息

关注微信