1.77、Linux中的信号有哪些?

主要信号分类及代表信号

  • • 标准信号(Standard Signals):Linux支持POSIX标准信号,编号通常从1到31,涵盖了大部分常见事件。
  • • 实时信号(Real-time Signals):编号从32开始,支持排队和优先级,适合复杂的进程间通信。

常见Linux信号及含义

信号名 编号 说明 特点
SIGHUP 1 终端挂断或控制进程终止 通常用于重新加载配置
SIGINT 2 用户中断(Ctrl+C) 可被捕获,常用于程序终止请求
SIGQUIT 3 用户请求退出(Ctrl+\) 产生核心转储
SIGILL 4 非法指令 程序错误导致
SIGABRT 6 异常终止(abort调用) 通常用于程序自我检测失败
SIGFPE 8 浮点异常(如除零) 算术错误
SIGKILL 9 强制终止进程 不可捕获、阻塞或忽略
SIGSEGV 11 无效内存访问(段错误) 访问非法内存地址
SIGPIPE 13 向已关闭的管道写数据 通信异常
SIGALRM 14 定时器到期 alarm系统调用触发
SIGTERM 15 终止请求(软件终止) 可被捕获,优雅退出
SIGCHLD 17 子进程状态改变 父进程接收子进程退出通知
SIGCONT 18 继续执行停止的进程 恢复被SIGSTOP暂停的进程
SIGSTOP 19 停止进程 不可捕获,强制暂停
SIGTSTP 20 终端停止信号(Ctrl+Z) 可捕获,用户请求暂停
SIGUSR1/2 10/12 用户自定义信号 用户程序自定义用途

信号处理机制

  • • 默认动作:终止、忽略、停止或产生核心转储。
  • • 自定义处理:程序可注册信号处理函数(handler)捕获并处理信号。
  • • 阻塞与屏蔽:进程可通过信号屏蔽字阻止特定信号的处理,保证关键代码段的安全。

面试考察重点

  • • 理解信号的异步性质及其在进程间通信和异常处理中的作用。
  • • 熟悉常见信号及其默认行为,尤其不可捕获的信号如SIGKILL和SIGSTOP。
  • • 能够解释信号处理流程,包括信号捕获、阻塞、默认动作和自定义处理函数。
  • • 了解实时信号与标准信号的区别及应用场景。
  • • 掌握如何在C++程序中使用signal()sigaction()注册信号处理函数。
    本文首发于【讳疾忌医-note】公众号,未经授权,不得转载。
    (加入我的知识星球,免费获取账号,解锁所有文章。)
阅读剩余
THE END