Linux 信号

发布时间 - 2025-07-11 00:00:00    点击率:

linux 系统的进程间通信(inter-process communication, ipc)机制包括6种主要类型:

管道(PIPE)、信号(Signal)、命名管道(FIFO)、消息队列(Message Queue)、套接字(Socket)和共享内存(Shared Memory)。信号(Signal)是 UNIX 系统中最早使用的进程间通信机制,Linux 作为 UNIX 的继承者,也支持这一机制。信号通过向一个或多个进程发送异步事件信号来实现,可以由键盘输入或访问不存在的位置等触发;信号通过 shell 将任务发送给子进程。

在 Linux 系统中,你可以通过输入 kill -l 命令来列出系统支持的信号列表,以下是一些常见的信号:

进程可以选择忽略接收到的信号,但有两个信号是无法忽略的:SIGSTOP 和 SIGKILL。SIGSTOP 信号会通知当前运行的进程停止执行,SIGKILL 信号会通知当前进程立即终止。除此之外,进程可以选择处理它想要处理的信号,也可以选择阻止信号。如果不阻止,可以选择自行处理或让内核进行默认处理。

操作系统会中断目标程序的进程以发送信号,在任何非原子指令中,执行都可以被中断。如果进程已经注册了信号处理程序,则执行该程序;如果没有注册,则采用默认处理方式。

例如:当进程收到 SIGFPE 浮点异常信号时,默认操作是进行转储(dump)并退出。信号没有优先级之分。如果同时为某个进程产生了两个信号,可以将它们按任意顺序呈现给进程或处理。

接下来我们详细了解这些信号的用途:

SIGABRT 和 SIGIOT:这两个信号发送给进程,指示其终止。通常在调用 C 标准库的 abort() 函数时由进程本身触发。

SIGALRM、SIGVTALRM、SIGPROF:当设置的时钟功能超时时,会将这些信号发送给进程。SIGALRM 在实际时间或时钟时间超时时发送,SIGVTALRM 在进程使用的 CPU 时间超时时发送,SIGPROF 在进程和系统代表进程使用的 CPU 时间超时时发送。

SIGBUS:当发生总线中断错误时发送给进程。

SIGCHLD:当子进程终止、被中断或恢复时,将此信号发送给进程。常用于指示操作系统在子进程终止后清理其使用的资源。

SIGCONT:SIGCONT 信号指示操作系统继续执行先前由 SIGSTOP 或 SIGTSTP 信号暂停的进程,常用于 Unix shell 中的作业控制。

SIGFPE:在执行错误的算术运算(如除以零)时发送给进程。

SIGHUP:当控制终端关闭时发送给进程。许多守护进程会重新加载配置文件并重新打开日志文件,而不是在收到此信号时退出。

SIGILL:在尝试执行非法、格式错误、未知或特权指令时发出。

SIGINT:当用户希望中断进程时,操作系统会发送此信号。用户按下 Ctrl-C 即是希望中断进程。

SIGKILL:此信号发送给进程以使其立即终止。与 SIGTERM 和 SIGINT 不同,此信号无法被捕获和忽略,进程在接收到此信号后无法执行任何清理操作。一些例外情况包括:

  • 僵尸进程无法被杀死,因为它们已经死亡,等待父进程捕获。
  • 处于阻塞状态的进程只有在被唤醒后才能被杀死。
  • init 进程是 Linux 的初始化进程,它会忽略任何信号。

SIGKILL 通常作为最后杀死进程的信号,常用于 SIGTERM 没有响应时发送给进程。

SIGPIPE:当尝试写入进程管道时发现管道未连接且无法写入时发送给进程。

SIGPOLL:当在明确监视的文件描述符上发生事件时发送此信号。

SIGRTMIN 至 SIGRTMAX:这些是实时信号。

SIGQUIT:当用户请求退出进程并执行核心转储时,由其控制终端发送给进程。

SIGSEGV:当进程做出无效的虚拟内存引用或分段错误时发送给进程。

SIGSTOP:指示操作系统终止进程以便以后恢复。

SIGSYS:当错误参数传递给系统调用时发送给进程。

SIGTERM:此信号发送给进程以请求终止。与 SIGKILL 不同,此信号可以被进程捕获或忽略,允许进程执行良好的终止,释放资源并在适当时保存状态。SIGTERM 与 SIGINT 几乎相同。

SIGTSTP:由其控制终端发送给进程,以请求终端停止。

SIGTTIN 和 SIGTTOU:当进程在后台尝试从 tty 读取或写入时分别发送给进程。

SIGTRAP:在发生异常或 trap 时发送给进程。

SIGURG:当套接字具有可读取的紧急或带外数据时发送给进程。

SIGUSR1 和 SIGUSR2:这些信号发送给进程以指示用户定义的条件。

SIGXCPU:当进程耗尽 CPU 的时间超过某个用户可设置的预定值时发送给进程。

SIGXFSZ:当进程生成的文件大小超过最大允许值时发送给进程。

SIGWINCH:当其控制终端更改大小(窗口更改)时发送给进程。

SIGHUP:当用户终端连接(正常或非正常)结束时发出,通常在终端的控制进程结束时通知同一 session 内的各个作业。这时它们与控制终端不再关联。登录 Linux 时,系统会为登录用户分配一个终端(Session)。在这个终端运行的所有程序,包括前台进程组和后台进程组,一般都属于这个 Session。当用户退出 Linux 登录时,前台进程组和后台有对终端输出的进程将会收到 SIGHUP 信号。默认操作是终止进程,因此前台进程组和后台有终端输出的进程就会中止。不过,进程可以捕获这个信号,比如 wget 可以捕获 SIGHUP 信号并忽略它,这样即使退出了 Linux 登录,wget 也能继续下载。此外,对于与终端脱离关系的守护进程,这个信号用于通知它重新读取配置文件。


# linux  # 操作系统  # 标准库  # red  # igs  # Session  # 继承  # signal  # 事件  # 异步  # unix  # 发送给  # 可以选择  # 被杀  # 结束时  # 配置文件  # 由其  # 这一  # 就会  # 是在 


相关栏目: 【 网站优化151355 】 【 网络推广146373 】 【 网络技术251813 】 【 AI营销90571


相关推荐: Laravel怎么使用artisan命令缓存配置和视图  Laravel如何实现多语言支持_Laravel本地化与国际化(i18n)配置教程  HTML5空格和margin有啥区别_空格与外边距的使用场景【说明】  php结合redis实现高并发下的抢购、秒杀功能的实例  Laravel如何实现API版本控制_Laravel版本化API设计方案  如何在阿里云完成域名注册与建站?  Android中Textview和图片同行显示(文字超出用省略号,图片自动靠右边)  Windows10电脑怎么设置虚拟光驱_Win10右键装载ISO镜像文件  如何自定义建站之星网站的导航菜单样式?  Laravel如何使用Vite进行前端资源打包?(配置示例)  Laravel如何处理JSON字段_Eloquent原生JSON字段类型操作教程  DeepSeek是免费使用的吗 DeepSeek收费模式与Pro版本功能详解  简单实现Android文件上传  详解jQuery停止动画——stop()方法的使用  学生网站制作软件,一个12岁的学生写小说,应该去什么样的网站?  Laravel怎么进行数据库事务处理_Laravel DB Facade事务操作确保数据一致性  VIVO手机上del键无效OnKeyListener不响应的原因及解决方法  谷歌Google入口永久地址_Google搜索引擎官网首页永久入口  Android实现代码画虚线边框背景效果  Chrome浏览器标签页分组怎么用_谷歌浏览器整理标签页技巧【效率】  JavaScript Ajax实现异步通信  php静态变量怎么调试_php静态变量作用域调试技巧【解答】  Python数据仓库与ETL构建实战_Airflow调度流程详解  Laravel如何使用withoutEvents方法临时禁用模型事件  Laravel如何获取当前用户信息_Laravel Auth门面获取用户ID  免费的流程图制作网站有哪些,2025年教师初级职称申报网上流程?  EditPlus中的正则表达式 实战(2)  mc皮肤壁纸制作器,苹果平板怎么设置自己想要的壁纸我的世界?  Python并发异常传播_错误处理解析【教程】  音响网站制作视频教程,隆霸音响官方网站?  如何在香港免费服务器上快速搭建网站?  夸克浏览器网页跳转延迟怎么办 夸克浏览器跳转优化  如何在VPS电脑上快速搭建网站?  Laravel如何实现文件上传和存储?(本地与S3配置)  怎么制作网站设计模板图片,有电商商品详情页面的免费模板素材网站推荐吗?  SQL查询语句优化的实用方法总结  千库网官网入口推荐 千库网设计创意平台入口  Laravel怎么写单元测试_PHPUnit在Laravel项目中的基础测试入门  javascript中闭包概念与用法深入理解  大同网页,大同瑞慈医院官网?  Win11怎么更改系统语言为中文_Windows11安装语言包并设为显示语言  百度输入法ai面板怎么关 百度输入法ai面板隐藏技巧  Laravel怎么实现一对多关联查询_Laravel Eloquent模型关系定义与预加载【实战】  Win11摄像头无法使用怎么办_Win11相机隐私权限开启教程【详解】  如何挑选最适合建站的高性能VPS主机?  Laravel怎么处理异常_Laravel自定义异常处理与错误页面教程  如何生成腾讯云建站专用兑换码?  Laravel如何安装使用Debugbar工具栏_Laravel性能调试与SQL监控插件【步骤】  如何快速登录WAP自助建站平台?  佛山企业网站制作公司有哪些,沟通100网上服务官网?