【Linux】详解信号产生的方式

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

一、kill命令

【Linux】详解信号产生的方式,linux,服务器,后端,c++,信息与通信,信号处理

在命令行中通过kill -数字 pid指令可以给指定进程发送指定信号。这里说明一下几个常见的信号:

  • SIGINT(2号信号):中断信号,通常由用户按下Ctrl+C产生,用于通知进程终止。
  • SIGQUIT(3号信号): 终止进程并产生core文件,用于后续分析程序崩溃时的状态和数据。
  • SIGKILL(9号信号):强制终止信号,不能被进程捕获或阻塞,用于强制结束进程。
  • SIGSTOP(20号信号):停止信号,使进程停止执行,直到收到SIGCONT信号。
  • SIGCONT(18号信号):继续信号,使之前被SIGSTOP信号停止的进程继续执行。
  • SIGALRM(14号信号):闹钟信号,当由alarm函数设置的定时器时间已经超过时产生。

        如果想查阅更多的信号,可以使用man 7 signal指令在官方手册中进行查找。

二、键盘产生信号

        不同的操作系统产生信号的键盘组合键可能不同,这里说的是ubuntu系统下。常见的键盘产生的信号有:

ctrl + c:向当前进程发送2号信号。

ctrl + \:向当前进程发送3号信号。

ctrl + z:向当前进程发送20号信号。 

三、系统调用产生信号

3.1、kill系统调用函数

 【Linux】详解信号产生的方式,linux,服务器,后端,c++,信息与通信,信号处理

二号手册查询。pid就是进程pid,指要向哪一个进程发信号,sig指要发送几号命令。

3.2、raise系统调用函数

【Linux】详解信号产生的方式,linux,服务器,后端,c++,信息与通信,信号处理

三号手册查询。raise就是一个用来给进程自己发信号的系统调用函数。sig指要发送哪一个信号。

3.3、abort系统调用函数

【Linux】详解信号产生的方式,linux,服务器,后端,c++,信息与通信,信号处理

三号手册。abort系统调用函数就是一个用来给进程自己发送6号信号的系统调用函数。 

四、软件条件产生信号

        在操作系统中,由软件条件产生的信号通常指的是通过某种软件操作或系统状态触发的信号。这些信号用于通知进程某个特定事件已经发生。下面会说明常见的软件条件:

4.1、管道通信

【Linux】匿名管道实现简单进程池-CSDN博客之前在这一篇博客中,我已经介绍了进程间使用管道通信的四种情况和五种特性,其中在第四种情况中,我曾经说过,读端关闭了,操作系统就会发送信号直接杀死进行写入的进程,因为没有读端写入也就没有了意义。此时操作系统给写端进程发送的正是SIGPIPE(十三号信号)直接终止写端进程。

4.2、时钟信号

         调用alarm函数可以设定一个闹钟,也就是告诉内核在seconds秒之后给当前进程发SIGALRM信号, 该信号的默认处理动作是终止当前进程 
#include <unistd.h>
unsigned int alarm(unsigned int second);
         second参数设置的是经过多少秒后向该进程发送时钟信号函数的返回值是0或者是以前设定的闹钟时间还余下的秒数
#include <iostream>
#include <unistd.h>
#include <signal.h>
using namespace std;

void handler(int signo)
{
    cout << "hello signal" << endl;
}

int main()
{
    signal(SIGALRM, handler);
    //5秒后闹钟响起,执行自定义方法
    alarm(5);
    while (true)
    {
        cout << "I am a process! my pid is " << getpid() << endl;
        sleep(1);
    }
    
    return 0;
}
经过5秒,我们果然看到了进程收到了闹钟信号,执行了自定义方法。
【Linux】详解信号产生的方式,linux,服务器,后端,c++,信息与通信,信号处理

        但如果我们前一个闹钟还没响我们又设了一个闹钟,新设置的闹钟先响了这时alarm函数的返回值就是以前设定的闹钟时间还余下的秒数。假设我此时先设置了一个500秒以后才响的闹钟,在自定义函数中又设置了5秒以后响的闹钟,然后在命令行中给这个进程提前发送闹钟信号。看代码和结果:

#include <iostream>
#include <unistd.h>
#include <signal.h>
using namespace std;

void handler(int signo)
{
    cout << "hello signal" << endl;
    //又设置了一个5秒后响的闹钟
    unsigned int n = alarm(5);
    cout << "还剩" << n << "秒" << endl;
}

int main()
{
    signal(SIGALRM, handler);
    alarm(500);
    while (true)
    {
        cout << "I am a process! my pid is " << getpid() << endl;
        sleep(1);
    }
    
    return 0;
}

  此时在命令行中提前发送闹钟信号:

【Linux】详解信号产生的方式,linux,服务器,后端,c++,信息与通信,信号处理

        我们可以看到第二个设置的闹钟的返回值为490,也就是上一个闹钟还没有跑完的时间。之后就是每隔5秒闹钟响一次。 

【Linux】详解信号产生的方式,linux,服务器,后端,c++,信息与通信,信号处理

五、异常产生信号

        常见的进程出异常产生信号有除0异常,操作系统会向进程发送8号信号(SIGFPE)。野指针,操作系统会向进程发送11号信号(SIGSEGV)。文章来源地址https://www.toymoban.com/news/detail-860917.html

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

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

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

相关文章

  • linux-三种远程连接服务器方式

    连接方式 3种 telnet 远程登陆 ssh远程连接 VNC远程连接 测试环境 linux版本:CentOS7 目的:尝试在windows系统主机上,用Telnet远程登录到windows服务器(server) 提示:windows客户端:telnet服务需要手动启动 Windows客户端:telnet命令的使用 ( 打开设置-搜索控制面板-程序-启用或关闭windo

    2024年02月15日
    浏览(39)
  • linux 服务器之间传输文件的方式

    情景:有时迁移项目,一般人就想到需要在服务器下载到win本地电脑上面,再上传到目的服务器,这样若是文件大,下载的速度都足够让你歇一天了。遇到这问题,怎么解决呢? 方法1:scp 【优点】 简单方便,安全可靠;支持限速参数 【缺点】 不支持排除目录 【用法】 s

    2024年02月07日
    浏览(45)
  • Linux服务器与群晖rsync同步,linux服务器通过rsync的方式备份数据到群晖

    准备需要备份linux服务器的配置,安装rsync即可 1.登录群晖服务器,点击套件中心  2.点击红色框框,跳转到套件界面 3.点击Active Backup for Business 4.点击文件服务器-添加服务器-选择rsync服务器-下一步 5.填写远程服务器信息 6.在群晖系统上创建备份任务 打开群晖的Active Backup fo

    2024年02月10日
    浏览(60)
  • 限制登录Linux服务器的几种方式

    在日常运维中,我们通常使用防火墙iptables跟firewalld的方式来实现访问控制,但在实际环境中,开启防火墙可能会对业务造成影响,所以以下整理了三种限制登录Linux服务器的几种方式。分别是修改TCP Wrappers服务访问控制、修改sshd_config配置文件、防火墙策略iptables跟firewalld。

    2024年02月17日
    浏览(47)
  • Linux环境编译服务器中修改python版本方式

    一、系统级修改 1、用whereis python查看服务器中存在的python 版本 2、删除原有的python版本环境 3、切换python 版本 4、查看python 版本 二、用户级修改 1、查看home/username目录下有没有以下两个隐藏文件 如果没有上面两个文件,从 /etc/skel/目录拷贝.bashrc、.profile两个文件到home/user

    2024年02月09日
    浏览(56)
  • LINUX通过vsftpd搭建FTP服务器 ( 最快 最直接的方式)

    这里只说最快最直接的方式,至于后面的权限配置,我就不写了。百度一大把 这里只记录成功将文件从MACBOOK通过FTP传到UBUNTU的过程 1.安装vsftpd sudo apt install vsftpd 2.查看服务状态,启动,停止等 systemctl status|start|stop vsftpd.service 基于systemctl的单元服务操作,不多说,都懂 3.Vstp配

    2024年02月10日
    浏览(48)
  • Linux - 进阶 NFS服务器 详解网络共享服务器 ( 预备知识)

               N  :  就是 网络 Network          F   :     就是  File  文件         S   :  system          简称为 网络文件系统                 官方   :               NFS 是一种古老的用于UNIX/LINUX主机之间进行文件共享的协议              Network  File  System 网

    2024年02月13日
    浏览(55)
  • 【Linux】NTP时间服务器Chrony配置详解

    🦄 个人主页——🎐开着拖拉机回家_大数据运维-CSDN博客 🎐✨🍁 🪁🍁 希望本文能够给您带来一定的帮助🌸文章粗浅,敬请批评指正!🍁🐥 🪁🍁🪁🍁🪁🍁🪁🍁 🪁🍁🪁🍁🪁🍁🪁 🪁🍁🪁🍁🪁🍁🪁🍁🪁🍁🪁🍁 🪁🍁🍁🪁🍁🪁🍁 感谢点赞和关注 ,每天

    2024年02月08日
    浏览(41)
  • linux 服务器执行post请求 curl命令详解

    curl是一个命令行访问URL的计算机逻辑语言的工具,发出网络请求,然后得到数据并提取出,显示在标准输出“stdout”上面,可以用它来构造http request报文,curl(CommandLine Uniform Resource Locator),即在命令行中利用URL进行数据或者文件传输。 基本语法: curl [option] [url] 实际用法 PO

    2024年02月02日
    浏览(45)
  • Linux服务器配置指南:网络、用户管理、共享服务及DNS配置详解

    💂 个人网站:【 海拥】【神级代码资源网站】【办公神器】 🤟 基于Web端打造的:👉轻量化工具创作平台 💅 想寻找共同学习交流的小伙伴,请点击【全栈技术交流群】 设置虚拟机的网卡为仅主机模式,并要求服务器采用双网卡, ens33 IP地址设置为192.168. 5.x/24(其中x学号),

    2024年02月05日
    浏览(58)

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

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

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

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

二维码1

领取红包

二维码2

领红包