【Linux】详解信号的分类&&如何自定义信号的作用

这篇具有很好参考价值的文章主要介绍了【Linux】详解信号的分类&&如何自定义信号的作用。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

一、信号的定义

        Linux系统提供的让用户(进程)给其他进程发送异步信息的一种方式。在操作系统中,信号是一种进程间通讯的有限制的方式,主要用于提醒进程某个事件已经发生。信号在Unix、类Unix以及其他POSIX兼容的操作系统中广泛应用。它作为一种异步的通知机制,当发送给一个进程时,操作系统会中断该进程正常的控制流程。操作系统要可以对信号进行如下的两个操作:

  • 操作系统能够识别一个信号并对该信号进行处理。
  • 因为信号是异步产生的,所以操作系统要能够对到来的信号进行临时保存。

二、信号的分类

kill -l//查看系统中所存在的信号

【Linux】详解信号的分类&&如何自定义信号的作用,linux,服务器,后端,c++,ubuntu,信息与通信

我们可以看到每一个信号对应一个信号和一个宏名称,以后我们给进程发送信号既可以采用发送数字的形式也可以采用发送宏名称的方式。 这里先认识一个信号,2号信号(SIGINT),用来退出终止进程,下面的例子会用到2号信号。

三、自定义信号的处理方式

        如果我们不对收到的信号做自定义处理方式,那该信号就会按默认的方式进行处理。自定义信号的处理方式在我的理解中有两种,一种是让收到该信号的进程处理我交给它的任务,另外一种是忽略该收到的信号,下面我会对这两种方式进行简单的演示。

3.1、收到该信号的进程处理我交给它的任务

【Linux】详解信号的分类&&如何自定义信号的作用,linux,服务器,后端,c++,ubuntu,信息与通信

        捕捉信号的函数为signal函数, 其中第一个参数就表示你要给进程发送第几号信号,第二个参数handler就是我们所写的函数,即我们要让进程在收到对应信号时所要执行的动作(替代默认动作),返回值为默认执行动作的函数指针,一般我们设定了新的执行动作就不需要默认执行动作了,所以返回值也可以不用接收。下面是让收到该信号的进程处理我交给它的任务的示例代码:

#include <iostream>
#include <unistd.h>
#include <sys/types.h>
#include <signal.h>

void handler(int sig)
{
    std::cout << "收到二号信号,但不退出!" << std::endl;
}

int main()
{
    signal(SIGINT, handler);

    while (true)
    {
        std::cout << "I am a process! my pid is : " << getpid() << std::endl;
        sleep(1);
    }

    return 0;
}

当我不在命令行中发送kill -2指令时,我的这个进程会一直正常打印: 

【Linux】详解信号的分类&&如何自定义信号的作用,linux,服务器,后端,c++,ubuntu,信息与通信

当我给这个进程发送一条二号指令时

【Linux】详解信号的分类&&如何自定义信号的作用,linux,服务器,后端,c++,ubuntu,信息与通信 该进程收到了2号信号,但已经不再执行原来的终止进程操作,转而执行我交给它的动作。

【Linux】详解信号的分类&&如何自定义信号的作用,linux,服务器,后端,c++,ubuntu,信息与通信

3.2、忽略收到的信号

忽略收到的信号只需要将signal函数的第二个参数改成SIG_IGN即可。

【Linux】详解信号的分类&&如何自定义信号的作用,linux,服务器,后端,c++,ubuntu,信息与通信

 SIG_IGN在定义中其实就是将数字1强转成为sighandler_t指针

#include <iostream>
#include <unistd.h>
#include <sys/types.h>
#include <signal.h>

int main()
{
    signal(SIGINT, SIG_IGN);

    while (true)
    {
        std::cout << "I am a process! my pid is : " << getpid() << std::endl;
        sleep(1);
    }

    return 0;
}

 上面这段代码无论再在命令行中输入kill -2指令都无法将进程终止,因为2号新号已经被忽略了。

【Linux】详解信号的分类&&如何自定义信号的作用,linux,服务器,后端,c++,ubuntu,信息与通信 进程还是照常运行:

【Linux】详解信号的分类&&如何自定义信号的作用,linux,服务器,后端,c++,ubuntu,信息与通信文章来源地址https://www.toymoban.com/news/detail-857958.html

到了这里,关于【Linux】详解信号的分类&&如何自定义信号的作用的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • Linux——进程信号详解

    目录 一.进程信号的理解 1.1定义: 1.2举例: 1.3总结: 二.进程信号地使用:         2.1信号种类:         2.2而操作系统向进程发送信号地方式有四种:  2.2.1以键盘的方式向进程发送信号         接下来介绍一个系统调用函数signal(): 2.2.2 以系统调用地方式向进程

    2024年02月13日
    浏览(29)
  • 【Linux】详解信号产生的方式

    在命令行中通过 kill -数字 pid 指令可以给指定进程发送指定信号。这里说明一下几个常见的信号: SIGINT(2号信号):中断信号,通常由用户按下Ctrl+C产生,用于通知进程终止。 SIGQUIT(3号信号): 终止进程并产生core文件,用于后续分析程序崩溃时的状态和数据。 SIGKILL(

    2024年04月28日
    浏览(41)
  • 学习Linux的注意事项(使用经验;目录作用;服务器注意事项)

    本篇分享学习Linux过程中的一些经验 Linux严格区分大小写 Linux中所有内容以文件形式保存 ,包括硬件,Linux是以管理文件的方式操作硬件 硬盘文件是 /dev/sd[a-p] 光盘文件是 /dev/sr0 等 对于设置需要写入文件,命令行的设置在重启之后就会失效,只有下入文件才可以保存下来 文

    2024年02月11日
    浏览(74)
  • Linux /dev目录详解和Linux系统各个目录的作用

    在linux下,/dev目录是很重要的,各种设备都在下面。下面简单总结一下: dev是设备(device)的英文缩写。 /dev这个目录对所有的用户都十分重要。 因为在这个目录中包含了所有Linux系统中使用的外部设备。但是这里并不是放的外部设备的驱动程序,这一点和 windows ,dos操作系统不

    2024年04月11日
    浏览(43)
  • 【Linux服务器】 .bashrc设置永久环境变量后不起作用的问题

            在使用vi打开.bashrc文件以后设置环境变量         然而发现设置了以后不起作用。这时候可以在终端界面使用export命令查看当前所有的PATH变量,我的情况是只出现了一条,别的都没有,这就说明在配置环境变量的过程中有一条配置语句将其他的PATH变量全部覆

    2024年02月02日
    浏览(50)
  • 『Linux』第九讲:Linux多线程详解(五)_ 信号量

    「前言」文章是关于Linux多线程方面的知识,上一篇是 Linux多线程详解(四),今天这篇是 Linux多线程详解(五),内容大致是信号量,讲解下面开始! 「归属专栏」Linux系统编程 「主页链接」个人主页 「笔者」枫叶先生(fy) 「枫叶先生有点文青病」「每篇一句」 求其上,

    2024年02月07日
    浏览(50)
  • Linux 路由表解密:详解路由表的构成与作用

    Linux是一种开源的操作系统,自由软件,使用范围非常广泛。Linux中有一个非常重要的功能,就是路由表。路由表是一张表格,用来描述网络中各个主机之间的连接关系。在Linux中,路由表的作用是将数据包从源地址发送到目标地址,并决定所经过的路由器。 目录 一、Linux路由

    2024年02月04日
    浏览(28)
  • 【Linux从入门到精通】信号量(信号量的原理与相关操作接口)详解

      本篇文章重点对 信号量的概念,信号量的申请、初始化、释放、销毁等操作进行讲解。同时举例把信号量应用到生产者消费者模型来理解 。希望本篇文章会对你有所帮助。 目录 一、信号量概念 1、1 什么是信号量 1、2 为什么要有信号量 1、3 信号量的PV操作 二、信号量的相

    2024年02月08日
    浏览(48)
  • MySQL Linux自建环境备份至远端服务器自定义保留天数

    linux下安装mysql请看 Linux环境安装单节点mysql8.0.16 系统版本: CentOS 7 软件版本: mysql8.0.16 此次备份依赖mysql自带命令mysqldump与linux下crontab命令(定时任务) mysqldump mysqldump客户实用程序执行 逻辑备份,产生一组能够被执行以再现原始数据库对象定义和表数据的SQL语句。它转储一

    2024年02月13日
    浏览(56)
  • 【Linux】什么是文件系统及inode?如何创建软硬链接?软硬链接有什么作用?

    了解一下文件系统: Linux ext2文件系统,上图为磁盘文件系统图(内核内存映像肯定有所不同),磁盘是典型的块设备,硬盘分区被 划分为一个个的block。一个block的大小是由格式化的时候确定的,并且不可以更改。例如mke2fs的-b选项可以设 定block大小为1024、2048或4096字节。而

    2024年02月11日
    浏览(51)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包