码农知识堂 - 1000bd
  •   Python
  •   PHP
  •   JS/TS
  •   JAVA
  •   C/C++
  •   C#
  •   GO
  •   Kotlin
  •   Swift
  • Linux进阶---第五篇


    目录

    1. 信号的基本概念 

    2. 修改信号的响应方式

    3.kill

    4.子进程结束会默认给父进程发送信号

    5.信号的实质


    1. 信号的基本概念 

    信号:通知进程产生了某种事件

    进程对此信号做出反应,忽略此信号,也是一种反应

    与信号有关的系统调用在"signal.h"头文件中有声明

    常见的信号

    SIGABORT --- 进程异常终止 

    SIGALRM --- 超时警告

    SIGFPE --- 浮点运算异常

    SIGILL --- 非法指令

    SIGHUP --- 连接挂断

    SIGINT --- 终端中断

    SIGKILL --- 终止进程(此信号不能被捕获或忽略)

    SIGQUIT --- 终端退出

    SIGTERM --- 终止

    ......

    2. 修改信号的响应方式

    #include <signal.h>

    typedef  void ( *sighandler_t ) (int);

    sighandler_t  signal ( int  signum,sighander_t  handler);

    第一个参数信号值,第二参数函数指针

    1)

     通过 Ctrl + C 将SIGINT --- 终端中断 这个信号发送给mian进程,强制其停止执行

    2)

     mian进程中的signal() 接受到 SIGINT --- Ctrl + C,这个信号后,内核会暂停当前正在执行的main进程(现场保护),而去调用fun_sig()

    调用fun_sig()时,会将信号值,作为参数传递给fun_sig()   =》 fun_sig(SIGINT)

    fun_sig() 执行结束后又会接着执行mian进程(现场恢复)

    3)

    在 2)中将main进程对信号的反应改为 自定义后,就不会再去调用默认的反应----终端中断

    4)

    第一次接收到SIGINT信号执行自定义,第二次接受到SIGINT执行默认

     对于同一个信号,第二次的进程反应会将第一次的进程反应覆盖掉

    5)

    #define   SIG_DFL   ( void(*) (int) )  0      //默认

    #define   SIG_IGN    ( void(*) (int) )  1     //忽略

    将整型值强转为函数指针

    6)忽略

    将SIGINT信号忽略

     

    7)

    如果将所有的信号全部忽略掉,进程不自己执行结束,没办法将其终止掉

    为了避免出现这种情况,系统留了 kill  -9这个信号,任意情况下强制弄死进程,此信号不允许被忽略

    3.kill

    #include <sys/types.h>

    #include <signal.h>

    int  kill (pid_t  pid,int  sig);

    第一个参数进程的pid,第二个参数信号值

     

    mykill

    1)

     2)

    4.子进程结束会默认给父进程发送信号

     

     手动获取子进程的退出码,子进程不会处于僵死状态

     

     

     WEXITSTATUS 获取退出码与直接获取退出码的区别

    直接获取退出码

     

     768 并不是 3

     用1个字节表示退出码并不是4个字节

    将其右移8位,即可获取退出码

      WEXITSTATUS 就是退出码就行右移8位的操作

    5.信号的实质

     

     

  • 相关阅读:
    【服务器数据恢复】Raid5阵列两块硬盘亮黄灯掉线的数据恢复案例
    Linux日志管理logrotate日志轮转
    《Milvus Cloud向量数据库指南》——高可用vs.容错:深度剖析数据库系统可靠性的双刃剑
    大模型笔记:RAG(Retrieval Augmented Generation,检索增强生成)
    简单裁图---小工具
    mysql基础
    使用Passay库为Spring Boot Thymeleaf Web应用自定义密码策略验证
    Mybatis中如何在mapper.xml中为date类型作为where条件呢?
    [附源码]java毕业设计校医院病人跟踪治疗信息管理系统
    急救医学-习题集-复习资料-题库
  • 原文地址:https://blog.csdn.net/LoveHoneyYou/article/details/124920158
  • 最新文章
  • 攻防演习之三天拿下官网站群
    数据安全治理学习——前期安全规划和安全管理体系建设
    企业安全 | 企业内一次钓鱼演练准备过程
    内网渗透测试 | Kerberos协议及其部分攻击手法
    0day的产生 | 不懂代码的"代码审计"
    安装scrcpy-client模块av模块异常,环境问题解决方案
    leetcode hot100【LeetCode 279. 完全平方数】java实现
    OpenWrt下安装Mosquitto
    AnatoMask论文汇总
    【AI日记】24.11.01 LangChain、openai api和github copilot
  • 热门文章
  • 十款代码表白小特效 一个比一个浪漫 赶紧收藏起来吧!!!
    奉劝各位学弟学妹们,该打造你的技术影响力了!
    五年了,我在 CSDN 的两个一百万。
    Java俄罗斯方块,老程序员花了一个周末,连接中学年代!
    面试官都震惊,你这网络基础可以啊!
    你真的会用百度吗?我不信 — 那些不为人知的搜索引擎语法
    心情不好的时候,用 Python 画棵樱花树送给自己吧
    通宵一晚做出来的一款类似CS的第一人称射击游戏Demo!原来做游戏也不是很难,连憨憨学妹都学会了!
    13 万字 C 语言从入门到精通保姆级教程2021 年版
    10行代码集2000张美女图,Python爬虫120例,再上征途
Copyright © 2022 侵权请联系2656653265@qq.com    京ICP备2022015340号-1
正则表达式工具 cron表达式工具 密码生成工具

京公网安备 11010502049817号