day33

  1. 常见信号编号及含义

· SIGHUP:终端挂起或控制进程终止

· SIGINT:键盘中断(Ctrl+C)

· SIGQUIT:键盘退出(Ctrl+\)

· SIGILL:非法指令

· SIGTRAP:调试断点/陷阱

· SIGABRT:异常终止(调用abort)

· SIGBUS:总线错误

· SIGFPE:浮点异常

· SIGKILL:强制终止(不可忽略、不可捕捉)

· SIGUSR1:用户自定义信号1

· SIGSEGV:段错误(无效内存访问)

· SIGUSR2:用户自定义信号2

· SIGALRM:定时器超时(alarm触发)

· SIGTERM:终止信号(可被捕捉或忽略)

· SIGCHLD:子进程状态变化(结束或暂停)

· SIGCONT:继续执行被暂停的进程

· SIGSTOP:暂停进程(不可忽略、不可捕捉)

· SIGTSTP:挂起信号(Ctrl+Z)

· SIGPIPE:管道破裂(写端无读端)

· SIGIO:异步I/O信号

· 实时信号:SIGRTMIN 至 SIGRTMAX 范围,用于实时应用

  1. 关键信号特性

· SIGINT:由键盘 Ctrl+C 触发,默认终止进程。

· SIGQUIT:由键盘 Ctrl+\ 触发,默认终止并产生核心转储。

· SIGKILL:不能被忽略或捕捉,只能执行默认终止操作。

· SIGSEGV:段错误时产生,通常由非法内存访问触发。

· SIGPIPE:向无读端的管道写入时产生,默认终止进程。

· SIGALRM:由 alarm 函数定时触发,默认终止进程。

· SIGCHLD:子进程结束时发送给父进程,默认被忽略,常被捕捉用于回收子进程。

· SIGSTOP:暂停进程执行,不可被忽略或捕捉。

· SIGTSTP:由键盘 Ctrl+Z 触发,默认暂停进程。

第二部分:信号操作函数

  1. signal(改变信号处理方式)

· 功能:修改指定信号的处理方式。

· 三种处理方式:

· 缺省:按系统默认方式处理。

· 忽略:信号到达时不执行任何操作。

· 捕捉:调用用户自定义的处理函数。

· 返回值:成功返回上一次注册的处理函数指针,失败返回错误标识。

  1. pause(让进程睡眠)

· 功能:使调用进程进入睡眠状态,直到收到一个信号。

· 特点:进程会一直阻塞,直到有信号递达并处理完毕。

  1. alarm(设置定时器)

· 功能:在指定秒数后向调用进程发送 SIGALRM 信号。

· 特点:每个进程只有一个定时器,重复调用会重置定时时间。

  1. kill(发送信号)

· 功能:向指定进程发送信号。

· 参数:目标进程的PID和要发送的信号编号。

· 成功返回0,失败返回-1。

第三部分:IPC对象概述

  1. IPC对象概念

IPC对象是内核中的内存文件,每个IPC对象可以创建一种通信机制,包括消息队列、共享内存和信号量数组。

  1. IPC对象查看与管理命令

· 查看命令:

· 查看所有IPC对象

· 查看消息队列

· 查看共享内存

· 查看信号量数组

· 删除命令:通过IPC对象名称(Key值)或ID号删除对应的IPC对象。

第四部分:消息队列

  1. 消息队列操作步骤

· 创建IPC对象名称(获取Key值)

· 创建消息队列

· 向队列发送消息

· 从队列接收消息

· 控制/删除消息队列

  1. ftok(生成IPC键值)

· 功能:根据目录路径和项目ID生成唯一的IPC对象键值(Key)。

· 参数:一个存在的目录路径和一个8位项目ID。

· 返回值:成功返回Key值,失败返回-1。

  1. msgget(创建消息队列)

· 功能:根据Key值创建或获取消息队列ID。

· 标志选项:不存在则创建;存在则报错。

· 返回值:成功返回消息队列ID,失败返回-1。

  1. msgsnd(发送消息)

· 功能:向指定的消息队列发送一条消息。

· 参数要点:消息队列ID、消息结构体指针、消息数据大小、标志(默认0)。

· 消息结构需包含消息类型和消息数据两部分。

  1. msgrcv(接收消息)

· 功能:从指定的消息队列接收一条消息。

· 参数要点:消息队列ID、存放消息的缓冲区指针、最大接收字节数、消息类型筛选值、标志。

· 可通过消息类型参数指定接收特定类型的消息。

· 返回值:成功返回实际接收的字节数,失败返回-1。

  1. msgctl(控制消息队列)

· 功能:对消息队列执行控制操作。

· 支持的操作包括:获取队列状态信息、修改队列权限、删除消息队列。

第五部分:共享内存

  1. 共享内存特点

共享内存是进程间通信效率最高的形式,多个进程通过将同一块物理内存映射到各自的虚拟地址空间,实现数据的直接共享访问。

  1. 共享内存操作步骤

· 创建IPC对象名称(获取Key值)

· 创建共享内存

· 将进程地址映射到共享内存中

· 使用共享内存空间

· 解除映射

· 销毁共享内存空间

  1. shmget(创建共享内存)

· 功能:根据Key值创建共享内存段。

· 参数要点:Key值、共享内存大小、创建标志。

· 标志选项:不存在则创建;存在则报错。

  1. shmat(映射共享内存)

· 功能:将共享内存映射到当前进程的虚拟地址空间。

· 参数要点:共享内存ID、映射地址(一般传NULL由系统自动选择)、标志(默认0)。

· 返回值:成功返回映射后的地址,失败返回-1。

  1. shmdt(解除映射)

· 功能:从当前进程的虚拟地址空间中解除共享内存的映射。

· 参数:映射到共享内存的起始地址。

· 解除映射后,进程不能再访问该共享内存。

  1. shmctl(控制共享内存)

· 功能:对共享内存执行控制操作。

· 支持的操作包括:获取属性信息、修改权限、删除共享内存。

第六部分:有名信号量(信号灯)

  1. 信号量概念

信号量是用于进程间同步与互斥的计数器,可用于控制多个进程对共享资源的访问。

  1. semget(创建信号量数组)

· 功能:根据Key值创建信号量数组。

· 参数要点:Key值、信号量个数、创建标志。

· 返回值:成功返回信号量数组ID,失败返回-1。

  1. semctl(控制信号量)

· 功能:对信号量数组执行控制操作。

· 参数要点:信号量ID、要操作的下标、命令。

· 支持的操作包括:删除信号量数组、设置信号量的值等。

  1. semop(申请和释放信号量)

· 功能:对信号量执行原子操作(申请或释放资源)。

· 参数要点:信号量ID、操作结构体数组指针、操作个数。

· 操作结构体包含三个字段:信号量下标、操作值(正数为释放,负数为申请)、操作标志。

第七部分:关键概念辨析

消息队列 vs 共享内存 vs 信号量

· 消息队列:以消息为单位传递数据,支持按类型接收,适合有格式的数据通信。

· 共享内存:直接映射共享数据区,传输效率最高,但需配合同步机制使用。

· 信号量:用于进程间同步与互斥,不传输数据,仅控制资源访问权限。

有名信号量 vs 无名信号量

· 无名信号量用于线程间同步或亲缘进程间同步。

· 有名信号量通过IPC键值创建,可用于任意进程间同步。

信号 vs 信号量

· 信号是异步通知机制,用于事件通知。

· 信号量是同步机制,用于资源计数与访问控制。

shmat 与 shmdt 的配对使用

· 每次shmat映射后,使用完毕必须调用shmdt解除映射,避免进程虚拟地址空间泄漏。

相关推荐
RedJACK~24 分钟前
Windows11一级右键菜单添加Alacritty教程
单片机·嵌入式硬件
qetfw35 分钟前
Debian lftp FTP 客户端使用:登录、目录切换与文件传输
linux·运维·debian
神威难绷泪40 分钟前
Linux应用软件编程:线程分离属性 互斥机制 同步机制 死锁
linux·开发语言·算法·线程
2401_8628808244 分钟前
Linux应用层开发 --- 管道
linux·运维·c语言
智闲电子设计1 小时前
STM32 DAC 实战:用 DMA 把定时器表变成波形,自制信号发生器
stm32·单片机·嵌入式硬件
NJCloud1 小时前
OpenStack(四)——进阶篇之私有网络配置与块存储服务(Cinder)部署
linux·网络·云计算·openstack
zcmodeltech1 小时前
反应装置模型控制系统设计与实现:多设备协同联动方案
java·网络·数据库·stm32·嵌入式硬件·能源·制造
深圳市恒锐丰科技杨生1 小时前
CL4054HL 36V 耐压 600mA 单节锂电池线性充电芯片|SOT23‑5 小型便携充电方案
嵌入式硬件·硬件工程
raindayinrain1 小时前
深入理解Linux内核--ext文件系统,open/write/read/close执行流程,性能优化
linux·性能优化·文件系统·文件系统调用