Linux系统编程信号

1.概述:信号当一个进程在运行中,给这个进程一个指令能得到相应的操作这就是信号,比如当一个进程进入死循环时我可以用ctr+c让它结束。
信号都用相应的编号但是没有0
2.信号的处理(进程获得信号后的操作)
a.忽略 就是进进程可以不受信号的影响但是,有两种信号进程不能忽略SIGKILL和SIGSTOP这两种信号,这两种信号是超级用户,如果这两种信号被忽略一般来说就是病毒。
b.捕捉 就是自定义一个函数,当进程获得某个信号时来执行这个自定义函数。
c.默认 就是系统自己对这个信号的安排。
3.编程
捕捉的函数
入门
*发送信号:kill -9 进程pid
接受信号:typedef void (sighandler_t)(int)
sighandler_t signal(int signum,sighandler_t handler)
第一个参数是代表着信号这里要用信号的名字表示。
第二个参数是函数指针的意思且这个函数有一个int型的参数
代码解析:其中hanlder就是函数

在这里插入图片描述
高级
接受信号:
int sigaction(int signum,const struct sigation *act,struct sigaction *oldact)
signum:就是信号的原始名称。
act:是一个结构体
struct sigaction {
void (*sa_handler)(int);
void (*sa_sigaction)(int, siginfo_t *, void *);
sigset_t sa_mask;
int sa_flags;
void (sa_restorer)(void);
}
并且这是库里面的结构体直接定义设置即可,
其中结构体
第一个参数一调用其他参数均不能使用此时的sigaction就和入门的signal一样了。
第二个叁数有三个参数,1.就是信号的序号。2.是一个联合体其中pid_t 就是发送进程的pid号。3.是一个指针,空指针则代表无数据,非空则代表有数据。
第三个参数代表着可以阻塞。默认为阻塞。
第四个参数若有数据必须要设置成,SA_SIGINFO.
发信号:
int sigqueue(pid_t pid,int sig,const union sigval value)
pid:是那个发送给那个进程
sig:信号
value:一个联合体有一个int 和一个char
typedef union sigval {
int sival_int;
void *sival_ptr; }
这个联合体需要在代码中写到
代码示例
在这里插入图片描述
在这里插入图片描述

Linux系统提供了各种系统调用API用于进程之间的通信:     无名管道PIPE     命名管道FIFO     消息队列     共享内存     信号量     文件锁     信号signal.... 其中还包括system V和POSIX 两种接口标准,除此之外,Linux系统自身还扩展了自己的一套API接口用于进程间通信,比如signalfd、timerfd、eventfd等。 本视频教程为《Linux系统编程》第05期,本期课程将会带领大家学习Linux下将近15种进程间通信IPC工具的使用,了解它们的通信机制、编程实例、使用场景、内核中的实现以及各自的优缺点。 本课程会提供PDF版本的PPT课件和代码,学员购买课程后可到课程主页自行下载 嵌入式自学路线指导图: ------------------------------------------------------------------------------------------------------                    《嵌入式工程师自我修养》嵌入式自学系列教程                                           作者:王利涛 ------------------------------------------------------------------------------------------------------ 一线嵌入式工程师精心打造,嵌入式学习路线六步走:  第 1 步:Linux三剑客 零基础玩转Linux+Ubuntu Git零基础实战:Linux开发技能标配 vim从入门到精通基础篇:零基础学习vim基本命令 vim从入门到精通定制篇:使用插件打造嵌入式开发IDE makefile工程实践基础篇:从零开始一步一步写项目的Makefile makefile工程实践第2季:使用Autotools自动生成Makefile 软件调试基础理论 printf打印技巧 Linux内核日志与打印 使用QEMU搭建u-boot+Linux+NFS嵌入式开发环境 第 2 步:C语言嵌入式Linux高级编程 第1期:C语言进阶学习路线指南 第2期:计算机架构与ARM汇编程序设计 第3期:程序的编译、链接和运行原理 第4期:堆栈内存管理 第6期:数据存储与指针 第7期:嵌入式数据结构与Linux内核的OOP思想 第8期:C语言的模块化编程 第9期:CPU和操作系统入门       搞内核驱动开发、光会C语言是不行的!       你还需要学习的有很多,包括:计算机体系架构、ARM汇编、程序的编译链接运行原理、CPU和操作系统原理、堆栈内存管理、指针、linux内核中的面向对象思想、嵌入式系统架构、C语言的模块化编程..... 第 3 步:Linux系统编程 第00期:Linux系统编程入门 第01期:揭开文件系统的神秘面纱 第02期:文件I/O编程实战 第03期:I/O缓存与内存映射 第04期:打通进程与终端的任督二脉 第05期:进程间通信-------------------we are here!‍      第 4 步:Linux内核编程‍     练乾坤大挪移,会不会九阳神功,是一道坎。搞驱动内核开发,懂不懂内核也是一道坎。 第 5 步:嵌入式驱动开发     芯片原理、datasheet、硬件电路、调试手段、总线协议、内核机制、框架流程.... 第 6 步:项目实战     嵌入式、嵌入式人工智能、物联网、智能家居...
©️2020 CSDN 皮肤主题: 数字20 设计师:CSDN官方博客 返回首页