信号概念
信号(Signal)是Unix系统中一种软件中断机制,用于通知进程发生了某种事件。
本质:信号是一种异常控制流形式,由操作系统内核发送给进程。当进程收到信号时,其正常执行流被中断,转而执行信号处理程序,处理完成后恢复原执行流(类似硬件中断的软件模拟)。
信号的分类:
SIGINT(2):用户按 Ctrl+C 时发送,默认终止进程。SIGKILL(9):强制终止进程,不能被捕获或忽略。SIGSEGV(11):段错误,非法内存访问。SIGCHLD(17):子进程终止时发送给父进程。SIGSTOP(19):暂停进程,不能被捕获或忽略。SIGCONT(18):恢复暂停的进程。
信号的生命周期:
- 发送(Delivery):内核向目标进程发送信号。
- 接收(Receipt):目标进程的信号处理机制处理该信号。
- 处理(Handling):执行默认操作或自定义信号处理函数。
信号分为可靠信号(实时信号,支持排队)和不可靠信号(标准信号,不排队,多个相同信号可能只接收一次)。标准Unix信号编号为 1-31,实时信号编号为 32-64。
链接到
- 上一个知识点:8.12 加载并运行程序execve
- 下一个知识点:8.14 发送信号