信号和信号处理
信号和中断
- 人员中断
- 进程中断
- 硬件中断
- 进程的陷阱错误
Unix/Linux中的信号处理
31种不同信号,每种都在signal.h文件中有定义。
信号的来源
- 来自硬件中断的信号
- 来自异常的信号
- 来自其他进程的信号
信号处理函数
每个进程PROC都有一个信号处理函数int sig[32]。sig[32]数组的每个条目都指定了如何处理相应的信号。
安装信号捕捉函数signal()->POSIX sigaction()
- 在执行已安装的信号捕捉函数之前,通常将信号处理函数重置为DEFault。
- signal()不能阻塞其他信号。
- signal()只能向捕捉函数发送一个信号编号。
- signal()可能不适用于多线程程序中的线程,sigaction()适用于线程。
- 不同Unix版本的signal()可能会有所不同。
信号处理步骤
- 当某进程处于内核模式时,会检查信号并处理未完成的信号;
- 重置用户安装的信号捕捉函数:用户安装的陷阱相关信号捕捉函数用于处理用户代码中的陷阱错误;
- 信号和唤醒:在Unix/Linux内核中有两种SLEEP进程(深度、浅度);
Linux中的IPC
IPC是指用于进程间通信的机制。
- 管道和FIFO
- 信号
- System V IPC
- POSIX消息队列
- 线程同步机制
- 套接字