信号概念

信号(Signal)是Unix系统中一种软件中断机制,用于通知进程发生了某种事件。

本质:信号是一种异常控制流形式,由操作系统内核发送给进程。当进程收到信号时,其正常执行流被中断,转而执行信号处理程序,处理完成后恢复原执行流(类似硬件中断的软件模拟)。

信号的分类

  • SIGINT(2):用户按 Ctrl+C 时发送,默认终止进程。
  • SIGKILL(9):强制终止进程,不能被捕获或忽略。
  • SIGSEGV(11):段错误,非法内存访问。
  • SIGCHLD(17):子进程终止时发送给父进程。
  • SIGSTOP(19):暂停进程,不能被捕获或忽略。
  • SIGCONT(18):恢复暂停的进程。

信号的生命周期

  1. 发送(Delivery):内核向目标进程发送信号。
  2. 接收(Receipt):目标进程的信号处理机制处理该信号。
  3. 处理(Handling):执行默认操作或自定义信号处理函数。

信号分为可靠信号(实时信号,支持排队)和不可靠信号(标准信号,不排队,多个相同信号可能只接收一次)。标准Unix信号编号为 1-31,实时信号编号为 32-64。

链接到