【Linux】信号的基本概念
来源:互联网 发布:童装淘宝店铺名字大全 编辑:程序博客网 时间:2024/05/20 04:12
什么是信号
生活中有各类的信号,就拿简单的例子来说吧,上下课的铃声,它可以提示我们哪个时间该上课或者下课。但是当我们收到上课铃声的信号后,到底是去上课,还是去玩,这就是看自己的决定方式了。这就表明我们可以忽略该信号,但是我们是知道该信号的意义的,虽然我们没有遵守,是去玩耍了。或者是墨迹一会再去上课,这就表明生活中的信号是可以不立即处理的。而计算机中的信号也是类似,进程可以发送信号,也可以接受信号。但一般接受信号后也不会立即进行处理。他们也知道收到对应信号的默认处理动作,也可以选择忽略对应信号,也可以执行自定义的信号。
信号的分类
在Linux下,我们可以通过kill -l来查看所有的信号其中1-31为普通信号,不支持排队等待,可能会造成信号丢失
34-64为实时信号,支持排队等待,不会造成信号丢失
信号的底层的数据结构是一个位图。
就拿普通信号来说,用32个比特位来表示1-31的信号。全0时表示没有收到信号,当某一位被置为1时,便表示收到了对应的信号
前台进程和后台进程
前台进程:需要和用户进行交互,具有较高的相应速度,优先级别高后台进程:几乎不和用户进行交互,优先级别相对较低
信号的产生方式
(1)通过终端产生信号
Ctrl+C 产生SIGINT,是普通信号中的2号信号,用来终止信号。Ctrl+\ 产生SIGQUIT信号,是普通信号中的3号信号,用于捕捉信号。
Ctrl+Z 产生SIGTSTP信号,是普通信号中的20号信号,可以让前台的进程终止。
(2)硬件异常产生信号
当发生除0错误时,CPU的运算单元会产生异常。此刻,内核便将该异常对应的信号SIGFPE发送给进程。(3)软件条件产生信号
一个进程调用kill(2)信号可以将信号发送给另一个进程;当闹钟超时产生的SIGALAM信号也是软件条件产生信号的一种方式。
#include<stdio.h>#include<unistd.h>#include<signal.h>int main(){int count = 1;alarm(1);for(; 1; count++){printf("Count = %d\n",count);}return 0;}
运行结果
信号处理方式
(1)忽略 ignore
对应的信号会被清除,进程对齐不产生任何操作(2)执行默认动作 default
执行对应的信号处理,每个信号都有对应的一种操作(3)提供信号处理函数,进行自定义 catch
捕获用户的自定义函数,执行用户自定义的函数signal.c
#include<stdio.h>void myhandler(int signal){printf("收到了 2 号信号\n");}int main(){signal(2,myhandler);//对于2号信号,捕获myhandler函数while(1){sleep(1);}return 0;}
makefile
signal:signal.cgcc -o signal signal.c.PHONY:cleanclean:rm signal
运行结果
信号的捕捉
中断该进程
进程被中断
阅读全文
0 0
- 【Linux】信号的基本概念
- Linux信号的基本概念
- linux的信号的基本概念
- Linux信号(一)-- 信号的基本概念
- linux中信号的基本概念
- 信号------信号的基本概念
- linux --- 信号 --- 基本概念
- linux信号之基本概念
- 信号处理的基本概念
- 信号的基本概念
- 信号的基本概念
- 信号的基本概念
- linux信号基本概念及如何产生信号
- UNIX/LINUX信号基本概念释疑
- linux系统编程手册阅读笔记-c20:信号的基本概念
- Linux下的信号(一)----信号的基本概念与产生
- 信号:基本概念
- 信号基本概念
- 范式哈夫曼编码(Canonical Huffman Code)
- tmpfs详解
- 根据输入的数字查出当前索引
- Ubuntu下配置code::blocks16.01为中文的方法
- UGUI系统学习之三种渲染模式Render Mode
- 【Linux】信号的基本概念
- ASP 支付宝v5版
- Ubuntu 16.04安装tensorflow,theano,keras和caffe,针对CPU only
- unity获取ugui上鼠标位置
- 1注释+进制转换
- Tomcat目录结构和作用
- Java Web前端到后台常用框架介绍
- Visual Stdio 无法找到资源编译器DLL
- linux 开机启动详细流程