基于linux下的高并发服务器开发(第二章)- 2.20 kill、raise、abort函数

news2024/11/28 8:52:22

03 / 信号的5种默认处理动作

当程序运行的过程中异常终止或崩溃,操作系统会将程序当时的内存状态记录下来,保存在一个文件中,这种行为就叫做Core Dump(中文有的翻译成“核心转储”)。我们可以认为 core dump 是“内存快照”,但实际上,除了内存信息之外,还有些关键的程序运行状态也会同时 dump 下来,例如寄存器信息(包括程序指针、栈指针等)、内存管理信息、其他处理器和操作系统状态和信息。core dump 对于编程人员诊断和调试程序是非常有帮助的,因为对于有些程序错误是很难重现的,例如指针异常,而 core dump 文件可以再现程序出错时的情景。

 core.c

#include <stdio.h>
#include <string.h>

int main(){

    char* buf;//buf是一个野内存,操作了野内存,出现段错误
    strcpy(buf,"hello");
    return 0;
}

问题:为什么我设置了core file size还是生成不了core文件?

我的系统是ubuntu,cat /proc/sys/kernel/core_pattern之后输出|/usr/share/apport/apport %p %s %c %d %P %E,查了之后发现ubuntu预装了apport错误收集系统,sudo service apport stop之后就可以了。

ulimit -a 

首先:sudo service apport stop

改文件的大小,ulimit -c 1024  

此时用ulimit -a 查看文件的大小

gcc core.c -g

执行./a.out  

然后gdb a.out 

查看错误信息:core-file core 

#include <sys/types.h>

#include <signal.h>

int kill(pid_t pid,int sig);

    kill - send signal to a process

    - 功能:给任何的进程或者进程组pid,发送任何的信号 sig

    - 参数:

        - pid :

            > 0 : 将信号发送给指定的进程

            = 0 : 将信号发送给当前的进程组

            = -1 : 表示将信号发送给每一个有权限接收这个信号的进程

            < -1 : 这个pid=某个进程组的ID取反(-12345)

        - sig : 需要发送的信号的编号或者是宏值,表示不发送任何信号

    kill(getppid(),9);

    kill(getpid(),9);

int raise(int sig);

    raise - send a signal to the caller

    - 功能:给当前进程发送信号

    - 参数:

        - sig : 要发送的信号

    - 返回值:

        - 成功 0

        - 失败 非0

    kill(getpid(),sig);

void abort(void);

    - 功能:发送SIGABRT信号给当前的进程,杀死当前进程

    - kill(getpid(),SIGABRT)

kill.c

/*
    #include <sys/types.h>
    #include <signal.h>

    int kill(pid_t pid,int sig);
        kill - send signal to a process
        - 功能:给任何的进程或者进程组pid,发送任何的信号 sig
        - 参数:
            - pid : 
                > 0 : 将信号发送给指定的进程
                = 0 : 将信号发送给当前的进程组
                = -1 : 表示将信号发送给每一个有权限接收这个信号的进程
                < -1 : 这个pid=某个进程组的ID取反(-12345)
            - sig : 需要发送的信号的编号或者是宏值,表示不发送任何信号

        kill(getppid(),9);
        kill(getpid(),9);
    
    int raise(int sig);
        raise - send a signal to the caller
        - 功能:给当前进程发送信号
        - 参数:
            - sig : 要发送的信号
        - 返回值:
            - 成功 0
            - 失败 非0
        kill(getpid(),sig);

    void abort(void);
        - 功能:发送SIGABRT信号给当前的进程,杀死当前进程
        - kill(getpid(),SIGABRT)
*/

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

int main(){
    pid_t pid = fork();
    if(pid == 0){
        //子进程
        int i=0;
        for(i = 0;i < 5; i++){
            printf("child process\n");
            sleep(1);
        }
    }else if(pid > 0){
        //父进程
        printf("parent process\n");
        sleep(2);
        printf("kill child process now\n");
        kill(pid,SIGINT);
    }
    return 0;
}

 

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

X86设备启动过程

文章目录 一、电源自检二、BIOS自检三、引导设备选择四、主引导记录4.1 0x7c0 五、加载操作系统 x86计算机启动过程&#xff0c;主要分为这几个阶段&#xff1a;电源自检、BIOS自检、引导设备的选择、主引导记录、加载操作系统。 一、电源自检 当我们按下开关键后&#xff0c;…

消息队列总结(3)- RabbitMQ Kafka RocketMQ高可用方案

目录 1. 什么是高可用&#xff1f; 1.1 常见的高可用方法 1.2 消息队列的高可用 2. RabbitMQ的高可用方案 2.1 镜像队列 2.2 消息生产的确认机制 2.3 消息的持久化 3. Kafka的高可用方案 3.1 消息备份 3.2 ISR & IEO & HW 3.3 消息生产的确认机制 4. Rocke…

在虚拟机中安装anaconda和pytorch

首先我用的是VMware&#xff0c;ubuntu16.04. 首先建议安装anaconda,登录官网Free Download | Anaconda 下载完成后&#xff0c;来到安装文件目录处&#xff0c;打开终端&#xff0c; 然后在终端输入bash <anaconda文件名> 然后就一直enter和yes到底&#xff0c;直到安…

【后端面经】微服务构架 (1-3) | 熔断:熔断-恢复-熔断-恢复,抖来抖去怎么办?

文章目录 一、前置知识1、什么是熔断?2、什么是限流?3、什么是降级?4、怎么判断微服务出现了问题?A、指标有哪些?B、阈值如何选择?C、超过阈值之后,要不要持续一段时间才触发熔断?5、服务恢复正常二、面试环节1、面试准备2、面试基本思路三、总结 在微服务构架中…

【OC总结 面向对象 + 内存管理 + runtime】

文章目录 前言面向对象1.1 一个NSObject对象占用多少内存&#xff1f;1.2 iOS的继承链 & 对象的指针指向了哪里&#xff1f;1.3 OC的类的信息存放在哪里&#xff1f;-isa指针1.4 isMemberOfClass & isKindOfClass Runtime1.4 讲一下OC的消息机制1.5 消息转发机制流程1.…

React 中 {} 的应用

列表渲染&#xff1a; 1.使用数组的 map 方法&#xff08;因为map 可以映射&#xff09; 2、列表要添加 key 属性&#xff0c;值要唯一 // 导入 // 用来获取 dom元素 import { createRoot } from "react-dom/client";// 内容 const contentArr [{ id: 1, name: &…

Spring Cloud【分布式配置中心(Spring Cloud Config 、Config配置总控中心搭建、Config配置读取规则)】(九)

目录 服务网关Gateway实现用户鉴权_网关全局过滤器加入JWT 鉴权 分布式配置中心_Spring Cloud Config 分布式配置中心_Config配置总控中心搭建 分布式配置中心_Config配置读取规则 服务网关Gateway实现用户鉴权_网关全局过滤器加入JWT 鉴权 配置跳过验证路由 org:my:jwt…

C++笔记之函数对象functors与可调用对象

C笔记之函数对象functors与可调用对象 code review! 文章目录 C笔记之函数对象functors与可调用对象0.函数对象&#xff08;Function Objects&#xff09;&#xff0c;也称为functors1.函数对象与可调用对象的关系2.可调用对象几种形式2.1. 使用函数对象2.2. 使用普通函数指针…

Linux 打包Qt程序到无Qt环境Linux系统下运行,问题记录

Linux 环境下Qt开发的摄像头程序用到了opencv的库&#xff0c;需要跟Qt环境一起打包。 1.打包所有关联库用的是脚本程序。 #!/bin/bashLibDir$PWD"/lib" Target$1lib_array($(ldd $Target | grep -o "/.*" | grep -o "/.*/[^[:space:]]*"))$(m…

谈谈跨域?!

1.什么是跨域 跨域是一个网页脚本访问另外一个网页的内容&#xff0c;如果这两个网页的协议、端口&#xff0c;域名有一个不同就会产生跨域问题&#xff0c;浏览器具有一个同源策略&#xff0c;是一个安全策略&#xff0c;为了避免被恶意修改数据或者操作dom。 2.如何解决跨域…

为什么学习SpringSpring框架核心与设计思想(IOC与DI)?

博主简介&#xff1a;想进大厂的打工人博主主页&#xff1a;xyk:所属专栏: JavaEE进阶 目录 文章目录 一、Spring是什么&#xff1f; 二、为什么要学习框架&#xff1f; 三、Spring核心概念 3.1 什么是容器&#xff1f; 3.2 什么是IOC&#xff1f; 四、再谈Spring中的 IOC 五…

高阶SQL语句

创建一个表一、按关键字排序1.1 单字段排序1.1.1 按分数排序&#xff0c;默认不指定是升序排列1.1.2 分数按降序排列1.1.3 结合where进行条件过滤&#xff0c;筛选地址是nanjing的学生按分数升序排列 1.2 多字段排序1.2.1 查询学生信息先按兴趣id降序排列&#xff0c;相同分数的…

C# List 详解三

目录 11.Equals(Object) 12.Exists(Predicate) 13.Find(Predicate) 14.FindAll(Predicate) 15.FindIndex(Int32, Int32, Predicate) 16.FindIndex(Int32, Predicate) 17.FindIndex(Predicate) C# List 详解一 1.Add(T)&#xff0c;2.AddRa…

信息管理系统---Servlet+javaBean+Druid+DButil

这里是学习了Servlet后结合数据库进行增删查改–登录等作为练手项目非常适合 准备工作&#xff1a; 1.数据准备 这张表是用户表&#xff0c;用于登录 CREATE TABLE users (id int NOT NULL AUTO_INCREMENT,username varchar(25) DEFAULT NULL,password varchar(20) DEFAULT…

【C++基础(四)】内联函数和auto关键字

&#x1f493;博主CSDN主页:杭电码农-NEO&#x1f493;   ⏩专栏分类:C初阶之路⏪   &#x1f69a;代码仓库:NEO的学习日记&#x1f69a;   &#x1f339;关注我&#x1faf5;带你学习C   &#x1f51d;&#x1f51d; 内联函数 1. 前言2. 内联函数概念3. 内联函数的特性…

数字IC实践项目(7)—CNN加速器的设计和实现(付费项目)

数字IC实践项目&#xff08;7&#xff09;—基于Verilog的CNN加速器&#xff08;付费项目&#xff09; 写在前面的话项目整体框图神经网络框图完整电路框图 项目简介和学习目的软件环境要求 资源占用&板载功耗总结 写在前面的话 项目介绍&#xff1a; 卷积神经网络硬件加速…

基于深度学习的高精度六类海船检测识别系统(PyTorch+Pyside6+YOLOv5模型)

摘要&#xff1a;基于深度学习的高精度六类海船检测识别系统可用于日常生活中检测与定位海船目标&#xff08;散装货船&#xff08;bulk cargo carrier&#xff09;、集装箱船&#xff08;container ship&#xff09;、渔船&#xff08;fishing boat&#xff09;、普通货船&…

[golang gin框架] 41.Gin商城项目-微服务实战之后台Rbac微服务(用户登录 、Gorm数据库配置单独抽离、 Consul配置单独抽离)

上一节抽离了captcha验证码功能,集成了验证码微服务功能,这一节来看看后台Rbac功能,并抽离其中的用户登录,管理员管理,角色管理,权限管理等功能作为微服务来调用 一.引入 后台操作从登录到后台首页,然后其中的管理员管理,角色管理,权限管理等功能可以抽离出来作为 一个Rbac微服…

视频画面尺寸怎么裁剪?裁剪视频画面方法分享

如果我们的视频将在不同的平台或设备上播放&#xff0c;而这些设备具有不同的屏幕比例&#xff08;如16:9、4:3、1:1等&#xff09;&#xff0c;则可能需要裁剪来适应目标屏幕。这样观看起来会体验效果更佳&#xff0c;但是该怎么裁剪视频的画面呢&#xff1f;给大家分享几种裁…

力扣热门100题之最长连续序列【中等】

题目描述 给定一个未排序的整数数组 nums &#xff0c;找出数字连续的最长序列&#xff08;不要求序列元素在原数组中连续&#xff09;的长度。 请你设计并实现时间复杂度为 O(n) 的算法解决此问题。 示例 1&#xff1a; 输入&#xff1a;nums [100,4,200,1,3,2] 输出&…