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


相关推荐: 如何在建站之星网店版论坛获取技术支持?  python中快速进行多个字符替换的方法小结  Laravel如何实现本地化和多语言支持_Laravel多语言配置与翻译文件管理  ,在苏州找工作,上哪个网站比较好?  Laravel中的Facade(门面)到底是什么原理  ChatGPT 4.0官网入口地址 ChatGPT在线体验官网  百度浏览器如何管理插件 百度浏览器插件管理方法  如何在阿里云部署织梦网站?  长沙企业网站制作哪家好,长沙水业集团官方网站?  微信小程序 HTTPS报错整理常见问题及解决方案  Laravel Seeder填充数据教程_Laravel模型工厂Factory使用  Laravel如何集成第三方登录_Laravel Socialite实现微信QQ微博登录  微博html5版本怎么弄发超话_超话进入入口及发帖格式要求【教程】  利用 Google AI 进行 YouTube 视频 SEO 描述优化  Android中AutoCompleteTextView自动提示  在Oracle关闭情况下如何修改spfile的参数  HTML透明颜色代码怎么让图片透明_给img元素加透明色的技巧【方法】  Laravel Eloquent访问器与修改器是什么_Laravel Accessors & Mutators数据处理技巧  Laravel如何处理CORS跨域问题_Laravel项目CORS配置与解决方案  Laravel如何使用Spatie Media Library_Laravel图片上传管理与缩略图生成【步骤】  Laravel如何使用Service Provider注册服务_Laravel服务提供者配置与加载  网站制作怎么样才能赚钱,用自己的电脑做服务器架设网站有什么利弊,能赚钱吗?  电商网站制作价格怎么算,网上拍卖流程以及规则?  高防服务器:AI智能防御DDoS攻击与数据安全保障  如何在 React 中条件性地遍历数组并渲染元素  微信小程序制作网站有哪些,微信小程序需要做网站吗?  INTERNET浏览器怎样恢复关闭标签页_INTERNET浏览器标签恢复快捷键与方法【指南】  Laravel任务队列怎么用_Laravel Queues异步处理任务提升应用性能  Laravel怎么发送邮件_Laravel Mail类SMTP配置教程  Laravel Docker环境搭建教程_Laravel Sail使用指南  Laravel如何实现多对多模型关联?(Eloquent教程)  开心动漫网站制作软件下载,十分开心动画为何停播?  Claude怎样写约束型提示词_Claude约束提示词写法【教程】  如何快速搭建高效WAP手机网站?  微信小程序 canvas开发实例及注意事项  C语言设计一个闪闪的圣诞树  大型企业网站制作流程,做网站需要注册公司吗?  详解Oracle修改字段类型方法总结  如何获取上海专业网站定制建站电话?  Laravel如何配置和使用队列处理异步任务_Laravel队列驱动与任务分发实例  中山网站制作网页,中山新生登记系统登记流程?  活动邀请函制作网站有哪些,活动邀请函文案?  公司门户网站制作公司有哪些,怎样使用wordpress制作一个企业网站?  Laravel如何创建自定义中间件?(Middleware代码示例)  Laravel怎么使用artisan命令缓存配置和视图  齐河建站公司:营销型网站建设与SEO优化双核驱动策略  Laravel如何使用Gate和Policy进行授权?(权限控制)  如何将凡科建站内容保存为本地文件?  网页制作模板网站推荐,网页设计海报之类的素材哪里好?  魔方云NAT建站如何实现端口转发?