linux信号:SIGINT、SIGKILL、SIGSTOP、SIGCONT

news2024/11/30 2:50:19

目录

1. SIGINT

2. SIGKILL

3. SIGSTOP与SIGCONT


简介

SignalStandardActionComment
SIGINTP1990TermInterrupt form keybord
SIGKILLP1990TermKill signal
SIGSTOPP1990TermInterrupt form keybord

1. SIGINT

我们在shell交互式进程中常用的ctrl + c 就是对当前运行的程序进行终止。当前命令可以通过signal函数进行自定义处理函数。

signal的函数原型:

/* Set the handler for the signal SIG to HANDLER, returning the old
   handler, or SIG_ERR on error.*/
__sighandler_t signal (int __sig, __sighandler_t __handler);

下面我们来看一下如何自定义信号处理函数

/*================================================================
*   Copyright (C) 2022 baichao All rights reserved.
*
*   文件名称:sigint.cpp
*   创 建 者:baichao
*   创建日期:2022年12月12日
*   描    述:
*
================================================================*/

#include <iostream>
#include <signal.h>
#include <unistd.h>

/**
 * 处理SIGINT信号
 **/
void sigintHandler(int signal)
{
    std::cout << "signalHandler get signlal " << signal << std::endl;
}

int main(int argc, char *argv[])
{

    /**
     * ctrl + c
     **/
    signal(SIGINT, sigintHandler);

    while (true)
    {
        sleep(1);
    }
}

运行结果: 

在终端进程运行时执行"ctrl + c"命令失效,因为ctrl + c 就是kill -2 pid,但是当前SIGINT信号的处理函数在当前进程中被自定义了,不再使用默认的"Interrupt"策略。

2. SIGKILL

我们最常用的kill -9也就是kill -SIGKILL。当前SIGKILL不能像上面的SIGINT那样在进程中自定义信号处理函数,这样无法自定义的还有下面的SIGSTOP。

/*================================================================
*   Copyright (C) 2022 baichao All rights reserved.
*
*   文件名称:sigkill.cpp
*   创 建 者:baichao
*   创建日期:2022年12月12日
*   描    述:
*
================================================================*/

#include <iostream>
#include <signal.h>
#include <unistd.h>

/**
 * 处理SIGKILL信号
 **/
void sigkillHandler(int signal)
{
    std::cout << "sigkillHandler get signlal " << signal << std::endl;
}

int main(int argc, char *argv[])
{

    /**
     * kill -9
     **/
    signal(SIGKILL, sigkillHandler);

    while (true)
    {
        sleep(1);
    }
}

运行结果:

 证实了SIGKILL确实没法自定义处理函数。

3. SIGSTOP与SIGCONT

/*================================================================
*   Copyright (C) 2022 baichao All rights reserved.
*
*   文件名称:sigstop.cpp
*   创 建 者:baichao
*   创建日期:2022年12月13日
*   描    述:
*
================================================================*/

#include <iostream>
#include <signal.h>
#include <unistd.h>

/**
 * 处理SIGSTOP信号
 **/
void sigstopHandler(int signal)
{
    std::cout << "sigstopHandler get signlal " << signal << std::endl;
}

int main(int argc, char *argv[])
{

    /**
     * kill -9
     **/
    signal(SIGSTOP, sigstopHandler);

    while (true)
    {
        sleep(1);
    }
}

运行结果:

我们可以看到: SIGSTOP信号不能在进程中自定义处理函数;

进程收到SIGSTOP信号后,会进入T (TASK_STOPPED or TASK_TRACED),挂起状态或跟踪状态。

如果要使得被挂起的进程重新运行,使用SIGCONT信号触发。

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

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

相关文章

[附源码]Node.js计算机毕业设计电影票网上订票系统Express

项目运行 环境配置&#xff1a; Node.js最新版 Vscode Mysql5.7 HBuilderXNavicat11Vue。 项目技术&#xff1a; Express框架 Node.js Vue 等等组成&#xff0c;B/S模式 Vscode管理前后端分离等等。 环境需要 1.运行环境&#xff1a;最好是Nodejs最新版&#xff0c;我…

2022年山东食品安全管理员模拟试题及答案

百分百题库提供食品安全管理员考试试题、食品安全管理员考试预测题、食品安全管理员考试真题、食品安全管理员证考试题库等&#xff0c;提供在线做题刷题&#xff0c;在线模拟考试&#xff0c;助你考试轻松过关。 一、单选题 1.下列哪项措施与保证食品安全无关&#xff1f; A…

2022gwb_web3

可以通过反序列化出一个 Webclome 类从而任意构造原生类&#xff0c;但只能调用 getSize 方法获取文件或目录 的大小&#xff0c;试了试直接拿根目录的 /flag 就别想了&#xff0c;先看看网站目录有没有藏什么东西&#xff08;扫目录什么也扫 不出来&#xff09;&#xff0c;EX…

再学C语言2:概览

重新把C语言梳理一遍&#xff0c;学习在VSCode中进行C语言编程 一、C语言起源 1972年&#xff0c;贝尔实验室的Dennis Ritchie在C语言的基础上设计出一种新的语言&#xff0c;即C语言 C是作为从事实际编程工作的程序员的一种工具儿出现&#xff0c;是为编程人员开发的语言 二…

【脚本项目源码】Python制作桌面宠物,这么可爱的萌宠你不想拥有吗?

前言 本文给大家分享的是如何通过利用Python制作桌面宠物&#xff0c;废话不多直接开整~ 开发工具 Python版本&#xff1a; 3.6 相关模块&#xff1a; random模块 os模块 cfg模块 sys模块 PyQt5模块 环境搭建 安装Python并添加到环境变量&#xff0c;pip安装需要的相…

skynet设计原理和使用

skynet设计原理一、多核并发编程方式二、skynet2.1、skynet简介2.2、环境准备2.3、编译安装2.4、Actor 模型2.5、消息队列2.6、actor公平调度三、skynet的使用3.1、第一个skynet程序3.2、skynet网络消息3.3、skynet定时消息3.4、skynet actor间消息四、vscode调试skynet总结后言…

Python比较难的知识点: 迭代器与生成器

迭代器与生成器是Python比较难的知识点, 在学Python之前, 我已经有了多年的C语言与MATLAB的使用经验了, 但是学这些知识点, 还是有一定的困难, 总觉得是一知半解的. 现在, 经过一段时间的学习和梳理, 感觉是搞懂了, 写下这篇文章与大家分享. 学习具体概念技术之前, 得知道这些…

c++ - 第17节 - AVL树和红黑树

1.AVL树 1.1.AVL树的概念 二叉搜索树虽可以缩短查找的效率&#xff0c;但如果数据有序或接近有序二叉搜索树将退化为单支树&#xff0c;查找元素相当于在顺序表中搜索元素&#xff0c;效率低下。因此&#xff0c;两位俄罗斯的数学家G.M.Adelson-Velskii和E.M.Landis在1962年发…

Mybatis:MyBatis的逆向工程(10)

Mybaits笔记框架&#xff1a;https://blog.csdn.net/qq_43751200/article/details/128154837 Mybatis中文官方文档&#xff1a; https://mybatis.org/mybatis-3/zh/index.html Mybati的逆向工程1. 正向工程 VS 逆向工程2. 创建逆向工程的步骤&#xff08;MyBatis3Simple清新简洁…

Go 1.20要来了,看看都有哪些变化-第1篇

前言 Go官方团队在2022.12.08发布了Go 1.20 rc1(release candidate)版本&#xff0c;Go 1.20的正式release版本预计会在2023年2月份发布。 让我们先睹为快&#xff0c;看看Go 1.20给我们带来了哪些变化。(文末有彩蛋&#xff01;) 安装方法&#xff1a; $ go install golan…

[附源码]Nodejs计算机毕业设计基于web的火车订票管理系统Express(程序+LW)

该项目含有源码、文档、程序、数据库、配套开发软件、软件安装教程。欢迎交流 项目运行 环境配置&#xff1a; Node.js Vscode Mysql5.7 HBuilderXNavicat11VueExpress。 项目技术&#xff1a; Express框架 Node.js Vue 等等组成&#xff0c;B/S模式 Vscode管理前后端分…

阅读器消退之际:文石造产品,掌阅塑生态

配图来自Canva可画 阅读器正在变得小众&#xff0c;似乎自Kindle以来营造的那种“阅读的生活方式”&#xff0c;已经被证明是一个伪命题&#xff1a;会阅读的人&#xff0c;无论如何都会去阅读&#xff1b;不会阅读的人&#xff0c;阅读器的归宿终究是一个“泡面盖”。于是&am…

Android原生项目接入flutter_boost4.0

折腾了好几天&#xff0c;经验思维导致的&#xff0c;记录一下踩坑。 官方接入步骤官方文档 接入原生&#xff0c;就3个步骤&#xff0c;我都能折腾好久&#xff0c;浪费时间。 flutter部分很简单&#xff0c;按文档配置就行&#xff0c;在pubspec.yaml依赖就好了。 &#…

Ceph性能瓶颈分析与优化(混合盘篇)

原文链接: Ceph性能瓶颈分析与优化(混合盘篇) - 知乎背景ssdhdd的混合盘场景在各个存储厂商中算是一种典型应用场景。 但是经过测试(4k随机写)发现&#xff0c;加了nvme ssd做ceph的wal和db后&#xff0c;性能提升仅一倍以内且nvme盘性能余量较大。所以希望通过对问题瓶颈进行…

目标检测数据标注案例-高清地图中障碍物(汽车)标注

计算机视觉在无人机中领域中有何作用? 无人机能够在空中识别、分类和追踪目标。无人机的摄像头和感应器可以捕获数据并进行分析&#xff0c;以提取重要信息。 AI可以自动提取视觉数据信息&#xff0c;准确识别、说明和追踪图像和视频中的目标。例如高空检测工作&#xff0c;…

Nacos 配置中心之长轮询--客户端

先来看下长轮询调用的链路 客户端 入口 在 NacosConfigService 初始化的时候,会初始化两个组件 一是网络组件,也就是http数据处理的 (起作用的是 ServerHttpAgent)二是客户端的长轮询ClientWorker public NacosConfigService(Properties properties) throws NacosException…

本地连接docker mysql

1.拉取镜像 docker pull mysql 2.启动mysql实例容器 docker run --name mysql -p 3307:3306 -e MYSQL_ROOT_PASSWORDmysql_pw -d mysql --name 为mysql的实例设置别名。 -p 3307为对外暴露的端口。3306是内部端口 -e MYSQL_ROOT_PASSWORD 设置mysql登录密码 -d 以守…

1.41.5 模型评估和选择,正则化和交叉验证

1.4&1.5 模型评估和选择&#xff0c;正则化和交叉验证模型评估和选择训练误差和测试误差过拟合正则化与交叉验证正则化交叉验证模型评估和选择 训练误差和测试误差 将预测系统的X作为输入&#xff0c;输入到模型里面&#xff0c;就可以得到预测结果。 学习到的模型&…

UNIX网络编程卷一 学习笔记 第五章 TCP客户/服务器程序示例

本章将编写一个完整的TCP客户/服务器程序&#xff0c;这个简单例子是执行以下步骤的一个回射服务器&#xff1a; 1.客户从标准输入读入一行文本&#xff0c;并写给服务器&#xff1b; 2.服务器从网络输入读入这行文本&#xff0c;并回射给客户&#xff1b; 3.客户从网络输入读入…

Spring Ioc 依赖来源-7

1. 依赖查找的来源&#xff1a;除容器内建和自定义Spring Bean之外&#xff0c;还有其他来源提供依赖查找吗&#xff1f; 查找来源 Spring 內建 BeanDefintion Spring 內建单例对象 当spring在注解环境下面, 这个 registerAnnotationConfigProcessors API会被调用, 它会被…