首页 > 运维 > linux运维 > 正文

Linux 信号

星夢妙者
发布: 2025-07-11 10:02:16
原创
517人浏览过

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

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

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

Linux 信号进程可以选择忽略接收到的信号,但有两个信号是无法忽略的: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:当尝试写入进程管道时发现管道未连接且无法写入时发送给进程。

微信 WeLM
微信 WeLM

WeLM不是一个直接的对话机器人,而是一个补全用户输入信息的生成模型。

微信 WeLM 33
查看详情 微信 WeLM

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 信号的详细内容,更多请关注php中文网其它相关文章!

最佳 Windows 性能的顶级免费优化软件
最佳 Windows 性能的顶级免费优化软件

每个人都需要一台速度更快、更稳定的 PC。随着时间的推移,垃圾文件、旧注册表数据和不必要的后台进程会占用资源并降低性能。幸运的是,许多工具可以让 Windows 保持平稳运行。

下载
来源:php中文网
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
最新问题
热门推荐
开源免费商场系统广告
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新 English
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送
PHP中文网APP
随时随地碎片化学习

Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号