信号的共性
1.简单
2.不能携带大量信息
3.满足特定条件才能发送
信号的机制
1.信号是软件层面的中断。一旦信号产生,无论程序运行到什么位置都必须结束
2.所有信号的产生以及处理都是内核产生.
信号的产生
1.按键产生 程ctrl+c ,ctrl+v
2.系统调用产生 kill函数
3.定时器 alarm,setitimer
4.硬件异常产生 非法访问内存
5.命令产生 如kill命令
信号的未决与递达
1.递达:信号产生递送并到达进程,直接被内核处理了
2.未决: 产生和递达中间,主要是由于阻塞导致了该状态
可靠信号与不可靠信号
不可靠信号:Linux信号机制基本上是从Unix系统中继承过来的。早期Unix系统中的信号机制比较简单和原始,后来在实践中暴露出一些问题,因此,把那些建立在早期机制上的信号叫做"不可靠信号"
可靠信号:随着时间的发展,实践证明了有必要对信号的原始机制加以改进和扩充。所以,后来出现的各种Unix版本分别在这方面进行了研究,力图实现"可靠信号"。由于原来定义的信号已有许多应用,不好再做改动,最终只好又新增加了一些信号,并在一开始就把它们定义为可靠信号,这些信号支持排队,不会丢失。可靠信号一般都有默认的处理动作。
信号的四要素
1.编号
2.名称
3.事件
4.默认处理动作
信号的处理方式
1.执行默认操作
2.忽略(丢弃)
3.捕捉(调用处理函数)
常用的信号
- SIGHUP: 当用户退出 shell 时,由该 shell 启动的所有进程将收到这个信号,默认动作为终止进程
- SIGINT:当用户按下了<Ctrl+C>组合键时,用户终端向正在运行中的由该终端启动的程序发出此信号。默认动
作为终止进程。 - SIGQUIT:当用户按下<ctrl+>组合键时产生该信号,用户终端向正在运行中的由该终端启动的程序发出些信
号。默认动作为终止进程。 - SIGILL: CPU 检测到某进程执行了非法指令。默认动作为终止进程并产生 core 文件
- SIGTRAP:该信号由断点指令或其他 trap 指令产生。默认动作为终止里程 并产生 core 文件。
- SIGABRT: 调用 abort 函数时产生该信号。默认动作为终止进程并产生 core 文件。
- SIGBUS:非法访问内存地址,包括内存对齐出错,默认动作为终止进程并产生 core 文件。
- SIGFPE:在发生致命的运算错误时发出。不仅包括浮点运算错误,还包括溢出及除数为 0 等所有的算法错误。
默认动作为终止进程并产生 core 文件。 - SIGKILL:无条件终止进程。本信号不能被忽略,处理和阻塞。默认动作为终止进程。它向系统管理员提供了
可以杀死任何进程的方法。 - SIGUSE1:用户定义 的信号。即程序员可以在程序中定义并使用该信号。默认动作为终止进程。
- SIGSEGV:指示进程进行了无效内存访问。默认动作为终止进程并产生 core 文件。
- SIGUSR2:另外一个用户自定义信号,程序员可以在程序中定义并使用该信号。默认动作为终止进程。
- SIGPIPE: Broken pipe 向一个没有读端的管道写数据。默认动作为终止进程。北京市昌平区建材城西路金燕龙办公楼一层 电话: 400-618-9090
- SIGALRM: 定时器超时,超时的时间 由系统调用 alarm 设置。默认动作为终止进程。
- SIGTERM:程序结束信号,与 SIGKILL 不同的是,该信号可以被阻塞和终止。通常用来要示程序正常退出。
执行 shell 命令 Kill 时,缺省产生这个信号。默认动作为终止进程。 - SIGSTKFLT: Linux 早期版本出现的信号,现仍保留向后兼容。默认动作为终止进程。
- SIGCHLD:子进程状态发生变化时,父进程会收到这个信号。默认动作为忽略这个信号。
- SIGCONT:如果进程已停止,则使其继续运行。默认动作为继续/忽略。
- SIGSTOP:停止进程的执行。信号不能被忽略,处理和阻塞。默认动作为暂停进程。
- SIGTSTP:停止终端交互进程的运行。按下<ctrl+z>组合键时发出这个信号。默认动作为暂停进程。
- SIGTTIN:后台进程读终端控制台。默认动作为暂停进程。
- SIGTTOU: 该信号类似于 SIGTTIN,在后台进程要向终端输出数据时发生。默认动作为暂停进程。
- SIGURG:套接字上有紧急数据时,向当前正在运行的进程发出些信号,报告有紧急数据到达。如网络带外
数据到达,默认动作为忽略该信号。 - SIGXCPU:进程执行时间超过了分配给该进程的 CPU 时间 ,系统产生该信号并发送给该进程。默认动作为
终止进程。 - SIGXFSZ:超过文件的最大长度设置。默认动作为终止进程。
- SIGVTALRM:虚拟时钟超时时产生该信号。类似于 SIGALRM,但是该信号只计算该进程占用 CPU 的使用时
间。默认动作为终止进程。 - SGIPROF:类似于 SIGVTALRM,它不公包括该进程占用 CPU 时间还包括执行系统调用时间。默认动作为终止
进程。 - SIGWINCH:窗口变化大小时发出。默认动作为忽略该信号。
- SIGIO:此信号向进程指示发出了一个异步 IO 事件。默认动作为忽略。
- SIGPWR:关机。默认动作为终止进程。
- SIGSYS:无效的系统调用。默认动作为终止进程并产生 core 文件。
注意:
9号信号SIGKILL与19号信号SIGSTOP不可以被处理、忽略、或者阻塞。