linux中高级信号函数sigaction和sigqueue实例
/*************************************************************************
> File Name: sigquque.c
> Author:
> Mail:
> Created Time: 2015年11月21日 星期六 14时33分25秒
************************************************************************/ #include <stdio.h>
#include <unistd.h>
#include <stdlib.h>
#include <signal.h>
#include <sys/types.h>
#include <sys/wait.h> //用新的回到函数接受数据。。。。
void myHandle_forsigaction(int signum, siginfo_t *s_t, void *p)
{
printf("parent recv a sig=%d data=%d data=%d\n", signum, s_t->si_value.sival_int, s_t->si_int);
} int main(int argc, char *argv[])
{
pid_t pid;
int ret = 0; struct sigaction act;
act.sa_sigaction = myHandle_forsigaction;
sigemptyset(&act.sa_mask); //如果父进程的回调函数, 准备接受额外数据
act.sa_flags = SA_SIGINFO; if (sigaction(SIGINT, &act, NULL) < 0)
perror("sigaction error\n"); pid = fork(); if (pid == -1)
{
printf("fork err...\n");
return 0;
} if (pid == 0)
{
int i = 0; /*
union sigval {
int sival_int;
void *sival_ptr;
}; */ union sigval mysigval;
//mysigval.sival_ptr = (void *)&t;
mysigval.sival_int = 222; //kill(getppid(), SIGINT);
//带额外数据
for (i=0; i<10; i++)
{
ret = sigqueue(getppid(), SIGINT, mysigval);
if (ret != 0)
{
printf("sigqueue .....\n");
exit(0);
}
else
{
printf("child send the SIGINT signal by the funtion sigqueue...%d\n", i+1);
sleep(1);
}
}
exit(10);
}
else if (pid > 0)
{
int status;
int time = 20;
while(time){
time = sleep(time);
}
wait(&status);
if(WIFEXITED(status)){
printf("the child exit code is %d\n", WEXITSTATUS(status));
}
} exit(0);
}

最后四次是按下Ctrl+c给父进程发送SIGINT信号,然后输出的值仍然是以前的值;
linux中高级信号函数sigaction和sigqueue实例的更多相关文章
- linux中信号的API详解实例
/************************************************************************* > File Name: signal.c ...
- linux系统编程之信号(六):信号发送函数sigqueue和信号安装函数sigaction
一,sigaction() #include <signal.h> int sigaction(int signum,const struct sigaction *act,struct ...
- linux系统编程之信号:信号发送函数sigqueue和信号安装函数sigaction
信号发送函数sigqueue和信号安装函数sigaction sigaction函数用于改变进程接收到特定信号后的行为. sigqueue()是比较新的发送信号系统调用,主要是针对实时信号提出的(当然 ...
- Linux 改进捕捉信号机制(sigaction,sigqueue)
sigaction函数 sigaction函数的功能是用于改变进程接收到特定信号后的行为. int sigaction(int signum, const struct sigaction *act, ...
- Linux进程间通信—信号
三.信号(Signal) 信号是Unix系统中使用的最古老的进程间通信的方法之一.操作系统通过信号来通知某一进程发生了某一种预定好的事件:接收到信号的进程可以选择不同的方式处理该信号,一是可以采用默认 ...
- linux下的struct sigaction
工作中使用案例: struct sigaction act; act.sa_sigaction = handleSignal; act.sa_flags = SA_SIGINFO; sigemptys ...
- Linux 对信号的总结
Linux信号_总结 对信号本质的理解: 类似于中断,区别在于中断是由硬件产生的,而信号是由软件实现的. 信号的来源: 触发硬件(触发键盘,或是硬件故障):软件信号函数kill .alarm.seti ...
- 信号 signal sigaction补充
目前linux中的signal()是通过sigation()函数实现的. 由signal()安装的实时信号支持排队,同样不会丢失. 先看signal 和 sigaction 的区别: 关键是 stru ...
- Linux&C ——信号以及信号处理
linux信号的简单介绍 信号的捕捉和处理 信号处理函数的返回 信号的发送 信号的屏蔽 一:linux信号的简单介绍. 信号提供给我们一种异步处理事件的方法,由于进程之间彼此的地址空间是独立的,所以进 ...
随机推荐
- JQuery 实践--让页面动起来
获取和设置元素特性特性属性:是指DOM元素中能够和HTML元素中某个特性对应得上的属性.通常JS特性属性的名称与对应的特性一一匹配,但class <=>className操作特性还是操作属 ...
- NSMutableArray
NSMutableArray 是一个可变数组,是NSArray的子类,但是不可以添加空值 创建NSMutableArray的方法 +(id)arrarWithCapacity:(NSInteger)n ...
- vue 重置data中表单form的值 重置变量
export default { data() { return { form:{ name:"张三", age:13, sex:1, address:"" } ...
- scrapy框架之Pipeline管道类
Item Pipeline简介 Item管道的主要责任是负责处理有蜘蛛从网页中抽取的Item,他的主要任务是清洗.验证和存储数据.当页面被蜘蛛解析后,将被发送到Item管道,并经过几个特定的次序处理数 ...
- elasticsearch 内部对象结构数据索引
内部对象 经常用于 嵌入一个实体或对象到其它对象中.例如,与其在 tweet 文档中包含 user_name 和 user_id 域,我们也可以这样写: { "tweet": &q ...
- Linux下expdp自动备份
创建sh脚本 [oracle@localhost backup]$ vi logicbackup.sh 添加脚本内容 #!/bin/sh # ############################# ...
- 以太坊联盟链 parity 节点搭建
https://www.cnblogs.com/sumingk/articles/9097996.html 上一篇文章介绍了以太坊私有链 geth节点的搭建,本篇介绍下企业级应用 联盟链搭建,运用pa ...
- django models 关系
1.一对多/多对一 class Entry(models.Model): name=models.CharField(max_length=50) def __str__(self): return ...
- Flume-自定义 Source 读取 MySQL 数据
开源实现:https://github.com/keedio/flume-ng-sql-source 这里记录的是自己手动实现. 测试中要读取的表 CREATE TABLE `student` ( ` ...
- (一)OpenCV-Python学习—基础知识
opencv是一个强大的图像处理和计算机视觉库,实现了很多实用算法,值得学习和深究下. 1.opencv包安装 · 这里直接安装opencv-python包(非官方): pip install ope ...