Linux中的信号 嵌入式系统实验室 EMBEDDED SYSTEM LABORATORY SUZHOU INSTITUTE FOR ADVANCED STUDY OF USTC
Linux中的信号
信号 信号在最早的Uniⅸ系统中就已经被引入了,用于 在用户态进程间通信。 冬内核也用信号通知进程系统所发生的事情 1958 嵌入式系统实验室 2023/7/14 Linux OS analysis 3158 EMBEDDED SYSTEM LABORATORY SUZHOU INSTITUTE FON ADVANCED STUDY OF USTC
2023/7/14 Linux OS analysis 3/58 信号 ❖信号在最早的Unix系统中就已经被引入了,用于 在用户态进程间通信。 ❖内核也用信号通知进程系统所发生的事情
信号 冬信号是很短的消息 ?标准信号 >标准信号没有给参数、消息或是其他相随的信息留有 空间 必通常使用一个数字来标识一个信号 冬信号可以被发送到一个进程或一组进程。 cience and Tecb 嵌入式系统实验室 2023/7/14 Linux OS analysis 4158 EMBEDDED SYSTEM LABORATORY SUZHOU INSTITUTE FON ADVANCED STUDY OF USTC
2023/7/14 Linux OS analysis 4/58 信号 ❖信号是很短的消息 ❖标准信号 ➢标准信号没有给参数、消息或是其他相随的信息留有 空间 ❖通常使用一个数字来标识一个信号 ❖信号可以被发送到一个进程或一组进程
软件中断的概念 冬信号的产生和处理方式跟中断有些相似 >信号是典型的异步事件 (当然也有一些事件是同步错误或异常) >大多数产生信号的事件对进程而言是随机出现 进程不可能做轮询来测试某个标志位或者变量来判别是否发生 了一个信号,而是必须告诉内核“在某个信号发生时,应该执 行如下操作”,这点跟中断处理例程相似,所以也不难理解标 准信号不带参数或者是其他的信息 跟硬件中断一样,任何动作,包括终止进程,都只能由接收到 信号的进程来执行,也就是在本进程的上下文中执行 Science and Techno 嵌入式系统实验室 2023/7/14 Linux OS analysis 5/58 EMBEDDED SYSTEM LABORATORY SUZHOU INSTITUTE FON ADVANCED STUDY OF USTC
2023/7/14 Linux OS analysis 5/58 软件中断的概念 ❖ 信号的产生和处理方式跟中断有些相似 ➢ 信号是典型的异步事件 (当然也有一些事件是同步错误或异常) ➢ 大多数产生信号的事件对进程而言是随机出现 ➢ 进程不可能做轮询来测试某个标志位或者变量来判别是否发生 了一个信号,而是必须告诉内核“在某个信号发生时,应该执 行如下操作”,这点跟中断处理例程相似,所以也不难理解标 准信号不带参数或者是其他的信息 ➢ 跟硬件中断一样,任何动作,包括终止进程,都只能由接收到 信号的进程来执行,也就是在本进程的上下文中执行
信号的作用 冬使用信号的两个主要目的是: >让进程知道已经发生了一个特定的事件 >强迫进程执行它自己代码中的信号处理程序 ●很多应用程序提供自己的信号处理程序 ● 系统也会定义一些缺省的信号处理程序 嵌入式系统实验室 2023/7/14 Linux OS analysis 6/58 EMBEDDED SYSTEM LABORATORY SUZHOU INSTITUTE FON ADVANCED STUDY OF USTC
2023/7/14 Linux OS analysis 6/58 信号的作用 ❖使用信号的两个主要目的是: ➢让进程知道已经发生了一个特定的事件 ➢强迫进程执行它自己代码中的信号处理程序 ⚫很多应用程序提供自己的信号处理程序 ⚫系统也会定义一些缺省的信号处理程序
信号的生成 异常 当一个进程出现异常(比如试图执行一个非法指令,除0,浮点 溢出等),内核通过向进程发送一个信号来通知进程异常的发 生 必」 其他进程 一个进程可以通过kill或是sigsend系统调用向另一个进程或一个 进出组发送信号。一个进程也可以向自身发送信号 必终端 >某些键盘字符如ctrl+c等会向终端的前台进程发送信号 Science and fechno 嵌入式系统实验室 2023/7/14 Linux OS analysis 7158 EMBEDDED SYSTEM LABORATORY SUZHOU INSTITUTE FON ADVANCED STUDY OF USTC
2023/7/14 Linux OS analysis 7/58 信号的生成 ❖ 异常 ➢ 当一个进程出现异常(比如试图执行一个非法指令,除0,浮点 溢出等),内核通过向进程发送一个信号来通知进程异常的发 生 ❖ 其他进程 ➢ 一个进程可以通过kill或是sigsend系统调用向另一个进程或一个 进出组发送信号。一个进程也可以向自身发送信号 ❖ 终端 ➢ 某些键盘字符如ctrl+c等会向终端的前台进程发送信号
?作业控制 >发送信号给那些想要读或泻终端的后台进程。比如shel使用信 号来管理前台和后台进程 ?配额限制 当,一个进程使用超过分配给它的cpu时间或是文件大小的限制, 内核发送一个信号给这个进程 冬通知 958 一个进程也许要求能被通知某些事件的发生。比如设备已经就 绪等待/O操作 必闹钟 >定时器产生的信号,由内核发送给进程 嵌入式系统实验室 2023/7/14 Linux OS analysis 8158 EMBEDDED SYSTEM LABORATORY SUZHOU INSTITUTE FON ADVANCED STUDY OF USTC
2023/7/14 Linux OS analysis 8/58 ❖ 作业控制 ➢ 发送信号给那些想要读或写终端的后台进程。比如shell使用信 号来管理前台和后台进程 ❖ 配额限制 ➢ 当一个进程使用超过分配给它的cpu时间或是文件大小的限制, 内核发送一个信号给这个进程 ❖ 通知 ➢ 一个进程也许要求能被通知某些事件的发生。比如设备已经就 绪等待I/O操作 ❖ 闹钟 ➢ 定时器产生的信号,由内核发送给进程
Linux/.i386中的部分信号 学 Signal name Default action Comment POSIX 1 SIGHUP Terminate Hang up controlling terminal or process Yes 2 SIGINT Terminate Interrupt from keyboard Yes 3 SIGQUIT Dump Quit from keyboard Yes 4 SIGILL Dump Illegal instruction Yes 5 SIGTRAP Dump Breakpoint for debugging No 6 SIGABRT Dump Abnormal termination Yes 6 SIGIOT Dump Equivalent to SIGABRT No 1 SIGBUS Dump Bus error No 8 SIGFPE Dump Floating-point exception Yes 9 SIGKILL Terminate Forced-process termination Yes 10 SIGUSR1 Terminate Available to processes Yes 11 SIGSEGV Dump Invalid memory reference Yes 12 SIGUSR2 Terminate Available to processes Yes 13 SIGPIPE Terminate Write to pipe with no readers Yes 14 SIGALRM Terminate Real-timerclock Yes 15 SIGTERM Terminate Process termination Yes 16 SIGSTKFLT Terminate Coprocessor stack error No 17 SIGCHLD Ignore Child process stopped or terminated,or got signal if traced Yes 18 SIGCONT Continue Resume execution,if stopped Yes
2023/7/14 Linux OS analysis 9/58 Linux/i386中的部分信号
19 SIGSTOP Stop Stop process execution Yes 20 SIGTSTP Stop Stop process issued from tty Yes 21 SIGTTIN Stop Background process requires input Yes 22 SIGTTOU Stop Background process requires output Yes 23 SIGURG Ignore Urgent condition on socket No 24 SIGXCPU Dump CPU time limit exceeded No 25 SIGXFSZ Dump File size limit exceeded No 26 SIGVTALRM Terminate Virtual timer clock No 27 SIGPROF Terminate Profile timer clock No 28 SIGWINCH Ignore Window resizing No 29 SIGIO Terminate 1/O now possible No 29 SIGPOLL Terminate Equivalent to sIGIo No 30 SIGPWR Terminate Power supply failure No 31 SIGSYS Dump Bad system call No 31 SIGUNUSED Dump Equivalent to sIGSYS No ence and Tec 2023/7/14 Linux OS analysis 嵌入式系统实验室 10/58 EMBEDDED SYSTEM LABORATORY SUZHOU INSTITUTE FON ADVANCED STUDY OF USTC
2023/7/14 Linux OS analysis 10/58
信号举例:"Ctr+c”组合键 假设用户在console下按下"ctrl+c”,这将产生终 端中断 >y驱动程序能识别出这个组合键,并向自己的前台进程 发送一个SIGINT信号。 >当对应进程被调度执行时,它将在上下文切换返回到用 户态时检查到这个信号。 此外,通常前台进程就是被ctrl+c中断的currenti进程。当 进程从中断返回时,也会检查到这个信号。 >检查到信号后,系统就会让进程执行相应的动作。 cience and lss 嵌入式系统实验室 2023/7/14 Linux OS analysis 11/58 EMBEDDED SYSTEM LABORATORY 5uE料DUN0 ITUTE FOR AOVANCED5 UOY DF U百TC
2023/7/14 Linux OS analysis 11/58 信号举例: “Ctrl+c”组合键 ❖假设用户在console下按下“ctrl+c”,这将产生终 端中断 ➢ tty驱动程序能识别出这个组合键,并向自己的前台进程 发送一个SIGINT信号。 ➢ 当对应进程被调度执行时,它将在上下文切换返回到用 户态时检查到这个信号。 ➢ 此外,通常前台进程就是被ctrl+c中断的current进程。当 进程从中断返回时,也会检查到这个信号。 ➢ 检查到信号后,系统就会让进程执行相应的动作