• 正文
  • 相关推荐
申请入驻 产业图谱

飞凌嵌入式ElfBoard-进程间的通信之信号处理signal

05/15 11:04
359
加入交流群
扫码加入
获取工程师必备礼包
参与热点资讯讨论

signal()主要是用于捕获信号,改变进程中对信号的默认行为。信号的处理是异步的,也就是说,不论程序当前正在执行什么代码,当信号到达时,信号处理函数都会立即执行。

1.头文件

#include <signal.h>

2.函数原型

typedef void (*sighandler_t)(int);

sighandler_t signal(int signum, sighandler_t handler);

3.参数

signum:参数指定需要捕获的信号

handler:指定信号处理函数,可以自定义处理信号的方式,也可以使用下列宏定义

SIG_DFL:使用默认的信号处理方式。

SIG_IGN:忽略信号,不进行任何处理。

4.返回值

返回之前的信号处理情况,如果signal函数调用出错则返回 SIG_ERR,并会设置 errno。

5.示例:通过signal()函数注册信号处理函数处理信号

#include <stdio.h>

#include <signal.h>

#include <stdlib.h>

#include <unistd.h>

void signal_handler(int sig)

{

printf("this signal number is %d \n",sig);

if (sig == SIGTERM) {

printf("get SIGTERM!\n");

}

if (sig == SIGINT) {

printf("get SIGINT!\n");

printf("The signal is restored to default processing!\n");

signal(SIGINT, SIG_DFL);

}

}

int main(void)

{

signal(SIGINT, signal_handler);

signal(SIGTERM, signal_handler);

while (1) {

printf("waiting for signal...\n");

sleep(5);

}

exit(0);

}

6.运行结果

直接运行程序:

waiting for signal...

waiting for signal...

^Cthis signal number is 2

get SIGINT!

The signal is restored to default processing!

waiting for signal...

waiting for signal...

^C

将程序挂载到后台运行:

$ ./a.out & #执行命令后台运行程序

[1] 201460

waiting for signal...

waiting for signal...

waiting for signal...

$ kill 201460 #中间执行命令尝试发送SIGTERM信号

this signal number is 15

get SIGTERM!

waiting for signal...

waiting for signal...

$ kill -9 201460 #执行命令彻底杀死进程

[1]+  Killed                  ./a.out

7.代码解析

代码中先定义了一个信号处理函数,对SIGINT和SIGTERM信号进行处理;在信号处理函数中判断当前信号类型,并做出相应的处理;①直接在shell终端中执行程序,用CTRL+C终止进程,第一次收到SIGINT信号进入处理函数会打印相关信息,然后将SIGINT恢复系统默认处理方式,再一次执行CTRL+C就能终止进程。②将进程挂到后台,执行kill <PID> 通过kill命令发送SIGTERM信号给进程,进程会打印相关信息,但是不会恢复系统默认处理方式,所以这个方法不能将进程终止,需要使用kill -9 <PID>向进程发送SIGKILL终止信号来杀死进程。

飞凌嵌入式

飞凌嵌入式

保定飞凌嵌入式技术有限公司,创建于2006年,是一家专注嵌入式核心控制系统研发、设计和生产的高新技术企业,是国内较早专业从事嵌入式技术的企业之一。 经过十几年的发展与积累,公司拥有业内优秀的软硬件研发团队,在北京及保定建立两大研发基地,在苏州、深圳设有华东、华南技术服务中心,并在北美、欧洲以及亚太等其他国家和地区拥有国际业务网络。公司研发的智能设备核心平台广泛应用于物联网、工控、轨道交通、医疗、电力、商业电子、智能家居、安防、机器人、环境监测等诸多领域。

保定飞凌嵌入式技术有限公司,创建于2006年,是一家专注嵌入式核心控制系统研发、设计和生产的高新技术企业,是国内较早专业从事嵌入式技术的企业之一。 经过十几年的发展与积累,公司拥有业内优秀的软硬件研发团队,在北京及保定建立两大研发基地,在苏州、深圳设有华东、华南技术服务中心,并在北美、欧洲以及亚太等其他国家和地区拥有国际业务网络。公司研发的智能设备核心平台广泛应用于物联网、工控、轨道交通、医疗、电力、商业电子、智能家居、安防、机器人、环境监测等诸多领域。收起

查看更多

相关推荐