目录

1. SIGINT

2. SIGKILL

3. SIGSTOP与SIGCONT


简介

Signal Standard Action Comment
SIGINT P1990 Term Interrupt form keybord
SIGKILL P1990 Term Kill signal
SIGSTOP P1990 Term Interrupt form keybord

1. SIGINT

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

signal的函数原型:

/* Set the handler for the signal SIG to HANDLER, returning the oldhandler, 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信号触发。

linux信号:SIGINT、SIGKILL、SIGSTOP、SIGCONT相关推荐

  1. Linux信号列表(sigint,sigtstp..)

    我们运行如下命令,可看到Linux支持的信号列表: $ kill -l1) SIGHUP        2) SIGINT        3) SIGQUIT       4) SIGILL 5) S ...

  2. Linux信号列表(sigint sigtstp

    分享一下我老师大神的人工智能教程!零基础,通俗易懂!http://blog.csdn.net/jiangjunshow 也欢迎大家转载本篇文章.分享知识,造福人民,实现我们中华民族伟大复兴! 我们运行 ...

  3. linux 信号signum.h SIGINT SIGUSR1 SIGUSR2

    头文件signum.h /* Signals.  */ #define    SIGHUP        1    /* Hangup (POSIX).  */ #define    SIGINT   ...

  4. SIGINT,SIGKILL,SIGTERM信号区别,各类信号总结

    SIGINT,SIGKILL,SIGTERM 三者都是结束/终止进程运行.但略微有区别. SIGINT 产生方式: 键盘Ctrl+C 产生结果: 只对当前前台进程,和他的所在的进程组的每个进程都发送S ...

  5. SIGQUIT/SIGTERM/SIGINT/SIGKILL四种信号的区别

    SIGQUIT/SIGTERM/SIGINT/SIGKILL四种信号的区别 SIGQUIT: SIGTERM: SIGINT: SIGKILL: SIGQUIT: 在POSIX兼容的平台,SIGQUI ...

  6. Linux shell 学习笔记(12)— linux 信号、后台运行脚本、作业控制、定时运行任务

    1. 处理信号 1.1 Linux 信号 常见的 Linux 信号如下表所示: 信号 值 描述 1 SIGHUP 挂起进程 2 SIGINT 终止进程 3 SIGQUIT 停止进程 9 SIGKILL ...

  7. linux signal函数用法,linux信号机制之sigaction构造体浅析,signal 函数,信号捕捉.

    来自:http://hi.baidu.com/phenix_yw/blog/item/6eb4ca391d1479f23a87ce19.html 信号安装函数sigaction(int signum, ...

  8. linux信号(signal) 机制分析

    1       信号本质 软中断信号(signal,又简称为信号)用来通知进程发生了异步事件.在软件层次上是对中断机制的一种模拟,在原理上,一个进程收到一个信号与处理器收到一个中断请求可以说是一样的. ...

  9. linux 信号 core,Shell 信号发送与捕捉

    原标题:Shell 信号发送与捕捉 作者:李振良OK 1.Linux信号类型 信号(Signal):信号是在软件层次上对中断机制的一种模拟,通过给一个进程发送信号,执行相应的处理函数. 进程可以通过三 ...

  10. (转载)Linux 信号signal处理机制

    信号是Linux编程中非常重要的部分,本文将详细介绍信号机制的基本概念.Linux对信号机制的大致实现方法.如何使用信号,以及有关信号的几个系统调用. 信号机制是进程之间相互传递消息的一种方法,信号全 ...

最新文章

  1. hadoop磁盘空间不均衡的解决办法
  2. sklearn做交叉验证
  3. STL标准库vector笔记
  4. PHP页面中嵌套go语言,go语言嵌套类型的使用细节
  5. RTT的IPC机制篇——邮箱
  6. 关于mac环境下删除cocos2d-x环境变量配置的方法
  7. centos 6 mysql 5.7.13 编译安装_Centos 6.5系统下编译安装PHP 7.0.13的方法
  8. Web前端大作业——城旅游景点介绍(HTML+CSS+JavaScript) html旅游网站设计与实现
  9. 怎么讲计算机屏幕录制,电脑如何录制屏幕
  10. lstm token分类模型代码解析(直接传入batch数据,测试pad和pack_padded、pad_packed三函数)
  11. The project seems to require yarn but it‘s not installed解决办法
  12. 如何用 canvas 画出分形图
  13. 获取android模拟器的IP地址
  14. H5页面嵌套在APP中的坑
  15. 什么是Google Voice
  16. 深度学习的下一个十年,延展基础科学研究变革的「角力场」
  17. ubuntu更新源修改更新源
  18. 【机器学习】聚类算法DBSCAN、K-means、Mean Shift对比分析及具体代码实现
  19. python解压zip_用Python处理ZIP压缩包
  20. linux启动流程及自定义gurb

热门文章

  1. java应届生如何找工作?
  2. 计算机专业我的理想作文,我的理想经典优秀作文
  3. 【Android studio】使用小米手机(MIUI8)真机调试
  4. 手机中好用的软件有哪些?让我来告诉你吧
  5. 一文看尽CES Asia:大变革下的汽车与全面AI化的智能家居
  6. iOS UILabel高度的极限值
  7. MFC中picture控件如何响应鼠标移动?
  8. 【GDAL基础教程】多张二维tif数据转三维tif数据
  9. 基于多线程的随机数生成算法
  10. PPT文件如何解决不能打印的问题