信号(Signal)是类Unix操作系统(如Linux、macOS)中用于进程间通信(IPC)的异步通知机制。它允许操作系统向进程发送事件通知,例如中断、终止、资源可用等,而无需进程主动查询系统状态。
核心特点
异步通知机制 信号通过中断当前进程执行流程,将控制权转移给信号处理函数,非阻塞式响应事件。
系统级通信
信号用于操作系统与进程间的通信,例如:
`SIGINT`(中断信号):通常由用户按下`Ctrl+C`触发
`SIGTERM`(终止信号):用于优雅终止进程
`SIGALRM`(定时器信号):用于设置或触发定时器
信号处理函数
进程可通过注册信号处理函数来定义对特定信号的反应。例如,处理`SIGINT`时执行清理操作。
与异常的区别
信号与程序异常(如除零错误)不同:
信号是外部事件通知,如硬件中断或系统事件
异常是程序运行时错误,如内存访问违规,需通过`try-catch`捕获
信号类型分类
可靠信号(后32种):支持排队,保证按顺序处理
不可靠信号(前32种):不支持排队,可能丢失
应用场景
资源管理: 如信号处理函数用于终止子进程或释放资源 用户交互
多任务协调:如信号用于进程间同步
注意事项
信号处理函数需快速执行,避免长时间阻塞
不同信号可能竞争执行,需注意信号屏蔽和原子操作
信号是类Unix系统中高效、轻量化的进程间通信机制,广泛应用于系统编程和高级应用开发中。