linux信号处理函数的可重入性
来源:互联网 发布:淘宝卖什么销量最好 编辑:程序博客网 时间:2024/06/05 03:50
在信号处理函数中,尽量使用可重入的函数接口(即操作的数据都是在堆栈上,不涉及全局变量),否则会引起数据的崩溃。一个简单的演示程序可以说明这点。
#include <stdio.h>
#include <signal.h>
int a=0;
void handleSig5(int num, siginfo_t * info, void * no_used)
{
a = 5;
printf("before kill a = %d\n", a);
kill(getpid(), 6);
printf("after kill a = %d\n", a);
return;
}
void handleSig6(int num, siginfo_t * info, void * no_used)
{
printf("set a to 6\n");
a = 6;
return ;
}
int main(void)
{
struct sigaction act;
act.sa_handler = handleSig5;
sigaction(5, &act, NULL);
act.sa_handler = handleSig6;
sigaction(6, &act, NULL);
printf("[%ld]wait a signal....\n", getpid());
getchar();
return 0;
}
在终端里手动向该进程发一个信号值为5的信号,其输出结果为
[2771]wait a signal....
before kill a = 5
set a to 6
after kill a = 6
从以上的结果可以看出,如果两个信号处理程序有共享同一个全局的变量 ,可能会导致数据观察的不一致性,引起程序的崩溃,这里也可以看出信号的处理不是
串行执行的,是可以交错执行的,基本上进程从内核态返回到用户态之前都对会挂起的信号执行检查,以执行相应的信号处理程序(信号处理程序是运行在用户态下的)
- linux信号处理函数的可重入性
- linux信号处理函数的可重入性
- linux信号处理函数
- Linux信号处理函数
- Linux下的信号处理函数
- Linux下的信号处理函数
- Linux 预定义的信号处理函数
- Linux信号处理函数的一些特征
- Linux信号、信号处理和信号处理函数
- Linux信号、信号处理和信号处理函数
- Linux信号、信号处理和信号处理函数
- Linux信号、信号处理和信号处理函数
- Linux信号、信号处理和信号处理函数
- Linux信号、信号处理和信号处理函数
- Linux信号、信号处理和信号处理函数
- Linux信号、信号处理和信号处理函数
- Linux — 信号 信号处理和信号处理函数详解
- Linux信号掩码和信号处理函数
- 网上下载图片并保持到SD卡中+读取SD卡中的图片
- UNIX文件属性(1)
- Java中的移位
- 爱立信实验室实习感想(一)
- JSON
- linux信号处理函数的可重入性
- HTML <ol>标签简介
- 点击选中radio
- 回顾php与html测试
- struts2 <s:textfield> value属性设置问题
- 那些年,在Fragment中犯的错
- android 三种定位方式
- 使用libxml提示libxml/tree.h找不到的问题解决
- Android NDK开发----- JNI多线程