linux信号:SIGINT、SIGKILL、SIGSTOP、SIGCONT
目录
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相关推荐
- Linux信号列表(sigint,sigtstp..)
我们运行如下命令,可看到Linux支持的信号列表: $ kill -l1) SIGHUP 2) SIGINT 3) SIGQUIT 4) SIGILL 5) S ...
- Linux信号列表(sigint sigtstp
分享一下我老师大神的人工智能教程!零基础,通俗易懂!http://blog.csdn.net/jiangjunshow 也欢迎大家转载本篇文章.分享知识,造福人民,实现我们中华民族伟大复兴! 我们运行 ...
- linux 信号signum.h SIGINT SIGUSR1 SIGUSR2
头文件signum.h /* Signals. */ #define SIGHUP 1 /* Hangup (POSIX). */ #define SIGINT ...
- SIGINT,SIGKILL,SIGTERM信号区别,各类信号总结
SIGINT,SIGKILL,SIGTERM 三者都是结束/终止进程运行.但略微有区别. SIGINT 产生方式: 键盘Ctrl+C 产生结果: 只对当前前台进程,和他的所在的进程组的每个进程都发送S ...
- SIGQUIT/SIGTERM/SIGINT/SIGKILL四种信号的区别
SIGQUIT/SIGTERM/SIGINT/SIGKILL四种信号的区别 SIGQUIT: SIGTERM: SIGINT: SIGKILL: SIGQUIT: 在POSIX兼容的平台,SIGQUI ...
- Linux shell 学习笔记(12)— linux 信号、后台运行脚本、作业控制、定时运行任务
1. 处理信号 1.1 Linux 信号 常见的 Linux 信号如下表所示: 信号 值 描述 1 SIGHUP 挂起进程 2 SIGINT 终止进程 3 SIGQUIT 停止进程 9 SIGKILL ...
- linux signal函数用法,linux信号机制之sigaction构造体浅析,signal 函数,信号捕捉.
来自:http://hi.baidu.com/phenix_yw/blog/item/6eb4ca391d1479f23a87ce19.html 信号安装函数sigaction(int signum, ...
- linux信号(signal) 机制分析
1 信号本质 软中断信号(signal,又简称为信号)用来通知进程发生了异步事件.在软件层次上是对中断机制的一种模拟,在原理上,一个进程收到一个信号与处理器收到一个中断请求可以说是一样的. ...
- linux 信号 core,Shell 信号发送与捕捉
原标题:Shell 信号发送与捕捉 作者:李振良OK 1.Linux信号类型 信号(Signal):信号是在软件层次上对中断机制的一种模拟,通过给一个进程发送信号,执行相应的处理函数. 进程可以通过三 ...
- (转载)Linux 信号signal处理机制
信号是Linux编程中非常重要的部分,本文将详细介绍信号机制的基本概念.Linux对信号机制的大致实现方法.如何使用信号,以及有关信号的几个系统调用. 信号机制是进程之间相互传递消息的一种方法,信号全 ...
最新文章
- hadoop磁盘空间不均衡的解决办法
- sklearn做交叉验证
- STL标准库vector笔记
- PHP页面中嵌套go语言,go语言嵌套类型的使用细节
- RTT的IPC机制篇——邮箱
- 关于mac环境下删除cocos2d-x环境变量配置的方法
- centos 6 mysql 5.7.13 编译安装_Centos 6.5系统下编译安装PHP 7.0.13的方法
- Web前端大作业——城旅游景点介绍(HTML+CSS+JavaScript) html旅游网站设计与实现
- 怎么讲计算机屏幕录制,电脑如何录制屏幕
- lstm token分类模型代码解析(直接传入batch数据,测试pad和pack_padded、pad_packed三函数)
- The project seems to require yarn but it‘s not installed解决办法
- 如何用 canvas 画出分形图
- 获取android模拟器的IP地址
- H5页面嵌套在APP中的坑
- 什么是Google Voice
- 深度学习的下一个十年,延展基础科学研究变革的「角力场」
- ubuntu更新源修改更新源
- 【机器学习】聚类算法DBSCAN、K-means、Mean Shift对比分析及具体代码实现
- python解压zip_用Python处理ZIP压缩包
- linux启动流程及自定义gurb