Linux 进程通信 -- 信号

一、概述

信号用于保持进程间的通信,可以备发送到一个进程或者一组进程,发送给进程的这个唯一信息通常是标志信号的一个数。信号可从键盘终端产生、虚拟内存中非法访问系统资源等情况下产生。信号异步发生,收到信号的进程可以采取某种动作或者忽略,大多数信号可以被阻塞。

对于每一个信号,进程可以采取一下三种措施进行动作或忽略:

  1. 忽略信号。收到信号的进程将忽略该信号,对该进程无任何影响。需要注意的是有两个信号不能被忽略:SIGKILLSIGSTOP.
  2. 执行这个信号相关的操作。由内核预定义的这个操作依赖于信号的类型,默认操作主要包括:忽略;终止进程;核心转储文件;停止进程;执行之前被暂停的进程。
  3. 调用相应的信号处理函数,类似中断操作。当进程收到信号时,信号处理函数被调用,当从信号处理函数返回后,被中断的进程将从其断点处重新开始执行。

二、Linux支持的信号

编号1~31的信号是传统UNIX支持的信号,是不可靠信号(非实时信号);编号为32~64的信号是后来扩充的,可靠信号(实时信号)。非实时信号不支持排队操作,可能造成信号丢失。

1、SIGHUP

在用户终端连接(正常或非正常)结束时发出,通常是在终端的控制进程结束时,通知同一Session内的各个作业,登陆Linux时,系统分配给登陆用户一个终端(Session)。当用户退出Linux时,前台进程组合后台进程组当中,有对终端输出的进程将收到这个SIGHUP信号。这个信号的默认操作为终止进程,因此前后台进程中有终端输出的进程会终止。wegt能捕获这个信号,并忽略。

2、SIGINT

程序终止信号,在用户输出INTR字符(通常是Ctrl+C)时发出,用于通知前台进程组终止进程。

3、SIGQUIT

和SIGINT类似,但由QUIT字符来控制。进程收到SIGQUIT退出时会产生core文件,类似于一个程序错误的信号。

4、SIGILL

执行非法指令。通常是因为可执行文件本身出错,或者执行错误程序段。堆栈溢出亦可能产生。

5、SIGTRAP

由断点指令或其他trap产生,由debugger使用。

6、SIGABRT

调用abort函数生成的信号。

7、SIGBUS

非法地址,包括内存地址对齐(alignment)出错。

8、SIGFPE

在发生致命错误的运算错误时发出。比如浮点运算出错,溢出及除数为0等其他所有的算数错误。

9、SIGKILL

立即结束程序的运行,无法被阻塞、处理和忽略。

10、SIGUSR1

用户保留使用。

11、SIGSEGV

试图访问未分配给自己的内存,或者试图往没有写权限的内存地址写数据。

12、SIGUSR2

用户保留使用。

13、SIGPIPE

管道破裂。读取管道没打开或者意外终止往管道写,写进程就会收到SIGPIPE信号。

14、SIGALRM

时钟定时信号,计算的是实际时间或时钟时间,alarm使用该信号。

15、SIGTERM

程序结束(terminate)信号,与SIGKILL不同,SIGTERM可以被阻塞和处理。通常永爱要求程序自己正常退出,shell命令kill 默认产生这个信号。

16、SIGSTKFLT

Linux专用,数学协处理器的栈异常。

17、SIGCHLD

子进程结束时,父进程会受到的信号。如果父进程没有处理这个信号,也没有等待子进程,子进程虽然终止,但是还会在内核进程表中占有表项,这时的子进程称为僵尸进程。

18、SIGCONT

让一个停止(Stopoed)的进程继续执行,不可被阻塞,可以用一个handler来让程序在有停止状态变为继续执行时完成特定的工作,例如重新显示提示符。

19、SIGSTOP

停止程序的执行,进程未结束,只是暂停执行,不可被阻塞、忽略或处理。

20、SIGTSTP

停止进程的运行,但该信号可以被处理和忽略,用户输入SUSP(通常是Ctrl+z)发出。

21、SIGTTIN

当后台作业要从用户终端读数据时,该作业中的所有进程会受到SIGTITN信号。默认时这些进程会停止执行。

22、SIGTTOU

类似SIGTTIN,在写终端、修改终端模式时收到。

23、SIGURG

有‘紧急’数据或带外(out-of-band)数据到达socket时产生。

24、SIGXCPU

超过CPU时间资源限制,可由getrlinit/setrlimit来读取或改变。

25、SIGXFSZ

进程试图扩大文件,以至于超过文件大小的资源限制。

26、SIGVTALRM

虚拟时钟信号。类似于SIGALRM,计算进程占用的CPU时间。

27、SIGPROF

包括进程占用的CPU时间以及系统调用的时间。

28、SIGWINCH

窗口大小改变时发出。

29、SIGIO

文件描述符准备就绪,可以开始进行输入、输出操作。

30、SIGPWR

电源失败。

31、SIGSYS

非法的系统调用。

 

 

 

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

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

相关文章

简单理解Socket

TCP/IP 要想理解socket首先得熟悉一下TCP/IP协议族, TCP/IP(Transmission Control Protocol/Internet Protocol)即传输控制协议/网间协议,定义了主机如何连入因特网及数据如何再它们之间传输的标准&…

write() vs. writev()

From: http://www.cppblog.com/whoami17/archive/2009/05/10/82452.html 今天突然想比较一下 write() 和 writev() 的性能, 网上google了半天, 竟然没有发现一点有关的数据信息, 自己就测试了一下。 平台如下: CentOS 5.2 Lin…

linux下GPRS模块ppp拨号上网

交叉编译器:arm-linux-gcc-4.5.4 Linux内核版本:Linux-3.0 主机操作系统:Centos 6.5 开发板:FL2440 GPRS:SIM900A 在开发SIM900模块之前,开发板已经加载了linux内核以及文件系统&#xf…

高级I/O(七)--readv和writev函数

From: http://blog.chinaunix.net/uid-26822401-id-3158225.html readv和write函数让我们在单个函数调用里从多个不连续的缓冲里读入或写出。这些操作被称为分散读&#xff08;scatter read&#xff09;和集合写&#xff08;gather write&#xff09;。 #include <sys/uio…

Linux下如何定位Java进程CPU利用率过高原因

首先通过Top命令查看占用CPU较高的进程PID&#xff0c;执行Top之后按1可以查看每个核占用比例 1 top这里由于我是用的虚拟机&#xff0c;即使我的Java进程占用CPU很高也只是占的虚拟机的&#xff0c;而对整个机器的CPU来说占的并不高。这里我们找到了pid7957 然后我们在根据pi…

【iOS开发】企业版证书($299)In-House方式发布指南

一、明确几个概念 1、企业版IDP&#xff1a;即iOS Development Enterprise Program。注意是$299&#xff0f;Year那种&#xff0c;并不是$99/Year的那种。 2、In House&#xff1a;是只企业内部发布&#xff0c;仅限企业内部人员使用。 二、In-House方式特点 1、不能发布到Appl…

RMSE、MAPE、准确率、召回率、F1、ROC、AUC总结

RMSE(root mean square error)均方根误差 单纯统计误差的值。 MAPE(mean absolute percentage error) 平均百分比误差 存在一个和原始数据相比较的过程。 准确率&#xff08;precision&#xff09;P&#xff1a; PTP/(TPFP) TP(true positive) FP(false positive) P是代表预…

hdu 5317 RGCDQ (2015多校第三场第2题)素数打表+前缀和相减求后缀(DP)

题目链接&#xff1a;http://acm.hdu.edu.cn/showproblem.php?pid5317 题意&#xff1a;F(x) 表示x的不同质因子的个数结果是求L&#xff0c;R区间中最大的gcd( F(i) , F(j) )&#xff0c;i、j在L&#xff0c;R区间内。 思路&#xff1a;因为2<L < R<1000000&#xf…

MATLAB 中RMSE和MAPE的计算方法

RMSE&#xff1a;均方根误差 matlab计算方法&#xff1a; rmse sqrt(mean((YPred-Obverval).^2)); MAPE&#xff1a;平均百分比误差 matlab计算方法&#xff1a; meap mean(abs((observed - predicted)./observed))*100;

shell 基本知识

shell--脚本基础知识 ****shell 脚本基础知识**** 一、基本脚本编译 知识内容&#xff1a; # 构建脚本 # 将命令串联起来 # 存储变量 # 数学计算 # 重定向输出 # 检查代码shell不像高级语言需要编译后执行&#xff0c;而是直接处理每一条命令&#xff0c;可以将多条命令连接起来…

让LwIP拥有PING其他设备的能力

LwIP是个很不错的协议栈&#xff0c;但是由于其体积过于小巧&#xff0c;使其只能支持ICMP的ECHO类型。 因为在“icmp.c”中的“void icmp_input(struct pbuf *p, struct netif *inp)”函数里有个很长的switch case语句&#xff08;大约80行的位置&#xff09;。 而这个语句只…

H.264详解

From: http://netliuwei.blog.163.com/blog/static/93642191201111721931583/ H.264 H.264&#xff0c;同时也是MPEG-4第十部分&#xff0c;是由ITU-T视频编码专家组&#xff08;VCEG&#xff09;和ISO/IEC动态图像专家组&#xff08;MPEG&#xff09;联合组成的联合视频组&…

VSCode中配置prettier和ESLint

文章目录 了解ESLint和Prettier的作用prettier配置ESLint配置常见问答ESLint 和Prettier 有什么区别&#xff1f;为什么我应该同时使用ESLint 和Prettier&#xff1f;在使用ESLint 和Prettier 时&#xff0c;有可能出现它们之间的规则冲突吗&#xff1f;我已经在项目中使用了ES…

Lwip使用经验

LWIP使用经验 一 LWIP内存管理 数据包管理 设置内存大小 宏编译开关 二 LWIP启动时序 三 LWIP运行逻辑 接收数据包 SequentialAPI函数调用 四 TCPIP核心知识点 滑动窗口 三次握手 断开连接 TCP状态转换 同时打开 同时关闭 五正确使用LWIP 六 LWIP常见问题 网卡驱动程序 内存…

Keil5 编译生成bin二进制文件的设置方法

勾选&#xff1a;After Build/Rebuild Run #1 代码&#xff1a;fromelf --bin .\output\node.axf --output .\output\NoiseApp.bin 解释&#xff1a; .\ 指当前工程文件.uvprojx所在的目录.\output\node.axf 表示给定axf所在的位置.\output\NoiseApp.bin 表示bin文件输出的…

在word中插入代码段的方法[转]

废话不多说&#xff0c;下面说明实现步骤 步骤一 1.打开这个代码高亮工具网站&#xff1a;http://www.planetb.ca/syntax-highlight-word 2.在代码框中粘贴代码&#xff0c;选择语言&#xff0c;点击Show Highlighted 3.复制生成的代码段 步骤二 4.在 Microsoft Word…

开源好用的思维导图软件XMind

作为一款免费开源的思维导图制作编辑软件&#xff0c;灵活的运用思维导图会让你在学习和工作上帮助甚大。 接下来我们除了介绍思维导图之外&#xff0c;还给大家介绍一款免费的思维导图制作软件 XMind&#xff0c;它能支持 Windows、Mac、Linux 主流操作系统&#xff0c;而且还…

STM32到GD32移植攻略

1、 系统 1) 晶振起振区别 描述&#xff1a;启动时间&#xff0c;GD32 与STM32 启动时间都是2ms&#xff0c;实际上GD 的执行效率快&#xff0c;所以ST 的HSE_STARTUP_TIMEOUT ((uint16_t)0x0500)是2ms&#xff0c;但是这个宏定义值在GD 上时间就更加短了&#xff0c;所以要加大…

Emmet:HTML/CSS代码快速编写神器

本文来源&#xff1a;http://www.iteye.com/news/27580 &#xff0c;还可参考&#xff1a;http://www.w3cplus.com/tools/emmet-cheat-sheet.htmlEmmet的前身是大名鼎鼎的Zen coding&#xff0c;如果你从事Web前端开发的话&#xff0c;对该插件一定不会陌生。它使用仿CSS选择…

HardFault_Handler问题查找方法

STM32出现HardFault_Handler故障的原因主要有两个方面&#xff1a; 1、内存溢出或者访问越界。这个需要自己写程序的时候规范代码&#xff0c;遇到了需要慢慢排查。 2、堆栈溢出。增加堆栈的大小。 出现问题时排查的方法&#xff1a; 发生异常之后可首先查看LR寄存器中的值&…