18. 信号

news/2025/2/19 16:01:38/文章来源:https://www.cnblogs.com/FlurryHeart/p/18717364

一、什么是信号

  在 Linux 中,信号是一种用于通知进程发生了某种事件的机制。信号可以由内核、其它进程或者命令行工具发送给目标进程。Linux 系统中由多种信号,每种信号都用一个唯一的数值表示。例如,常见的信号如下:

  • SIGINT (2):这是当用户在终端按下 Ctrl+C 时发送给前台进程的信号,通常用于请求进程终止。
  • SIGKILL (9):这是一种强制终止进程的信号,它会立即终止目标进程,且不能被捕获或忽略。
  • SIGTERM (15):这是一种用用户请求进程终止的信号,通常由系统管理员或其它进程发送给目标进程。
  • SIGUSR1 (10)SIGUSR2 (12):这两个信号是用户自定义的信号,可以由应用程序使用。
  • SIGSEGV (11):这是一种表示进程非法内存访问的信号,通常是由于进程尝试访问未分配的内存或者视图访问非法指令而导致的。
  • SIGALRM (14):这是一个定时器信号,通常用于在一定时间间隔后向目标进程发送信号。

  每种信号都有特定的含义和行为,进程可以通过注册信号处理函数来捕获信号并执行相应的操作。如果想要查看所有的 Linux 信号,可以执行 kill -l 指令,会的到以下反馈。

常见的信号

二、注册信号处理

  我们可以使用通过 signal 系统调用注册信号处理函数。

typedef void (*__sighandler_t) (int);/*** @brief 注册信号处理函数* * @param __sig 要处理的信号* @param __handler 当收到对应的信号时,要调用的函数* @return __sighandler_t 返回之前的信号处理函数,如果错误返回SEG_ERR*/
__sighandler_t signal (int __sig, __sighandler_t __handler);

  signal() 系统调用会注册某一信号对应的处理函数。如果注册成功,当进程收到这一信号时,将不会调用默认的处理函数,而是调用这里的自定义处理函数。

三、信号处理例程

  我们新建一个 main.c 文件。

#include <stdio.h>
#include <signal.h>
#include <unistd.h>
#include <stdlib.h>void sigint_handler(int signum);int main(void)
{if (signal(SIGINT, sigint_handler) == SIG_ERR){perror("register signal error!");exit(EXIT_FAILURE);}while (1){sleep(1);printf("wait for Ctrl+C to stop the signal.\n");}return 0;
}void sigint_handler(int signum)
{printf("receive %d signal.\n", signum);exit(signum);
}

  我们在终端中使用 gcc 编译程序,生成可执行文件,然后运行它。

gcc main.c -o main
./main

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/884405.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【专题】DeepSeek技术颠覆or创新共赢,开启Al算法变革元年报告汇总PDF洞察(附原数据表)

原文链接: https://tecdat.cn/?p=39544 在科技飞速迭代的当下,人工智能领域正经历着深刻变革,AI Agent 的发展尤为引人瞩目。 随着数字化进程的加速,全球数据量呈指数级增长,如同为 AI Agent 的发展提供了丰沃土壤。海量数据不仅为模型训练提供了坚实基础,更驱动着 AI A…

Python梯度提升模型GBM生态学研究:SFS、RandomizedSearchCV预测黑腿蜱种群分布丰度可视化-

全文链接:https://tecdat.cn/?p=39232 原文出处:拓端数据部落公众号 广义线性模型一直是揭示自然种群分布和丰度背后生态过程的基础统计框架。然而,随着环境和生态数据的快速增长,分析这些大规模数据集需要更先进的统计方法。梯度提升树等现代机器学习框架,能有效识别复杂…

9.7.5 预测

这里的预测过程不是图\(9\)-$14,应该是下面这幅图,这里有误

【第四期书生大模型实战营】L0G4000 玩转「HF/魔搭/魔乐」等平台

闯关任务 闯关任务需要在关键步骤当中截图!任务 描述 时间模型下载 使用Hugging Face平台、魔搭社区平台(可选)和魔乐社区平台(可选)下载文档中提到的模型(至少需要下载config.json文件、model.safetensors.index.json文件),请在必要的步骤以及结果当中截图。 20min模型…

Linux驱动---中断上下半部

文章介绍了中断的上下半部机制,重点分析了下半部的实现方式,如软中断、tasklet和工作队列。目录一、中断上下半部二、下半部实现机制2.1、定时器2.2、软中断2.3、任务队列2.4、工作队列2.5、内核线程 一、中断上下半部 在上一篇文章按键驱动中,代码做了一个这样的设计。大家…

Git 查看提交日志及差异对比

学习使用图形化的方式查看提交历史,调查提交之间、分支之间或者甚至你的工作目录、暂存区和存储区之间有哪些变更。 本节 Git 命令概览 git log # 列出“当前分支”中的所有提交 # 💡 最后一个提交在最上面,后面是它的父提交,依此类推查看提交历史记录 git log # 列出“当…

肖哥弹架构【CSDN2024年度博客之星总评选】求拉票

2024年度博客之星进入拉票环节 1、投票地址 肖哥弹架构:CSDN投票地址 https://www.csdn.net/blogstar2024/detail/287 。 各位读者们、兄弟姐妹们。多多投票,你的支持就是我的动力。感谢! 2、投票二维码3、投票时间段 2月14日-2月20日 每日有相同票数的投票机会 ,4、2024…

风车IM通讯源码【已搭建验证】

风车IM即时通讯聊天系统源码_聊天APP_附APP_带安装教程 风车im 是一款独立服务器部署的即时通讯解决方案,可以帮助你快速拥有一套自己的移动社交、 企业办公、多功能业务产品。独立部署!加密通道!牢牢掌握通讯信息! 源码下载:https://www.yundazhe.cn/757.html 本文在【云…

绿色通道(单调队列dp)

崩溃了,debug半天发现是变量名重复了 #include<iostream> #include<cstring> #define int long long using namespace std; const int N=1e5; int q[N]; int f[N]; int w[N]; int sum=0; signed main(){int n,ti;cin>>n>>ti;for(int i=1;i<=n;i++…

Transformer模型在J6平台上的高效支持

背景 相对于传统 CNN 模型来说,Transformer 模型的最大的一个特点就是灵活性。这个灵活性主要体现在模型中穿插大量的数据重排操作,即 Reshape 和 Transpose。如下图 1 所示,对于一个典型的 Attention 结构来说,Reshape 和 Transpose 操作的数量大概可以占到所有操作的一半…