以下只表个人理解,欢迎大家指教--------- 信号:就是软件中断,中断编号为int型 在系统中用宏定义成名
作用:实现进程之间的异步通信、异常处理等
(进程通信分同步和异步通信,如下图)
A进程--->B进程 A进程--->B进程
| |
V V
同步通信 异步通信
等到B回复后才能往后执行 不等B回复也能往后执行
信号的产生:
1、终端驱程向前台信号,如 Ctrl+C
2、硬件中断,如被除数是0、无效内存访问
3、调用kill()函数向某个进程发送信号
4、定时器溢出等 如 alam().
处理信号的方式:
linux工作时可以处于用户态(user mode)和内核态(kernl mode),但是在处理信号时,必须换到krenl mode来选择处理信号的方式,处理信号的方式有:
(个人理解:它就和单片机的中断服务程序相似)
1、忽略此信号,即不答理它
2、注册一个函数来自理,即用户自定义(自己写个函数来处理)
3、按系统默认处理
例如:在执行用户程序main()时,突然来了一个信号,名为SININT,些时将产生一个中断,去执行中断服务程序,这个中断服务程序就是信号处理方式,如下图所示:
|