第六章学习笔记

发布时间 2023-11-12 17:47:01作者: 远游

第六章 信号和信号处理

  1. 信号与中断
    在Linux操作系统中,信号是一种进程间通信的机制,用于通知进程发生了某个事件。信号有两种来源:硬件产生的中断和软件生成的信号。

硬件中断: 是由硬件设备触发的事件,如硬件故障或定时器触发。内核会中断当前进程的执行,执行与中断相关的处理程序。

软件信号: 是由软件事件触发的通知,如用户键盘输入或进程错误。这是一种异步通信机制,不同于进程间通信的其他形式。

  1. Unix/Linux信号事例
    常见的信号包括:

SIGINT (2): 中断信号,通常由用户按下Ctrl+C触发,用于终止正在运行的进程。

SIGTERM (15): 终止信号,用于请求进程正常退出。

SIGKILL (9): 强制终止信号,用于立即终止进程。

SIGHUP (1): 终端挂起或控制进程终止时发送的信号。

  1. Unix/Linux中的信号处理
    信号处理是在接收到信号时执行的特定动作。可以通过信号处理函数来定义对特定信号的处理方式。使用signal()函数可以为每个信号设置自定义的处理函数。

include <signal.h>

void signal_handler(int signum) {
// 处理信号的代码
}

int main() {
// 设置信号处理函数
signal(SIGINT, signal_handler);

// 主程序代码

return 0;

}
4. 信号处理步骤
信号产生: 信号由硬件或软件事件触发。

信号传递: 内核将信号传递给目标进程。

信号处理: 目标进程执行与信号关联的处理函数。

  1. 信号与异常
    信号处理与异常处理有相似之处,但信号是由操作系统或其他进程发送的,而异常通常是由程序内部错误引起的。

  2. 信号用作IPC
    信号也可以用作进程间通信的一种简单方式。通过在进程间发送信号,可以实现一些基本的同步和通信操作。

  3. Linux中的IPC
    Linux提供了多种进程间通信的机制,如消息队列、信号量、共享内存等。这些机制允许不同进程之间进行数据交换和协作。

IPC的目录
消息队列: /dev/mqueue/

信号量: /dev/shm/

共享内存: /dev/mem/