linux下信号的处理(3)
2009-05-23 17:17
1091 查看
当我们想要在信号处理函数中跳转时,可以使用sigsetjmp,siglongjmp来让信号处理函数实现跳转,看例子:
#include<stdio.h>
#include<setjmp.h>
#include<signal.h>
#include<unistd.h>
jmp_buf env;
#define ENV_SAVED 1
#define ENV_UNSAVED 0
int flag_envsaved = ENV_UNSAVED;
void sighandler_MIN15()
{
if(flag_envsaved==ENV_UNSAVED)
return;
printf("singhandler_MIN15 runing/n");
longjmp(env,1);
}
int main()
{
switch(sigsetjmp(env,1))
{
case 0:
printf("SIGRTMAX-15=%d ,SIGRTMIN+15=%d/n",SIGRTMAX-15,SIGRTMIN+15);
flag_envsaved = ENV_SAVED;
break;
case 1:
printf("recive signal SIGMIN+15/n");
default:
break;
}
signal(SIGRTMIN+15,sighandler_MIN15);
while(1)pause();
return 0;
}
编译后执行,在另外一个中端中用ps -a来查看该进程的pid,然后用 kill -s 49 pid来给这个进程发送信号,观察输出。
#include<stdio.h>
#include<setjmp.h>
#include<signal.h>
#include<unistd.h>
jmp_buf env;
#define ENV_SAVED 1
#define ENV_UNSAVED 0
int flag_envsaved = ENV_UNSAVED;
void sighandler_MIN15()
{
if(flag_envsaved==ENV_UNSAVED)
return;
printf("singhandler_MIN15 runing/n");
longjmp(env,1);
}
int main()
{
switch(sigsetjmp(env,1))
{
case 0:
printf("SIGRTMAX-15=%d ,SIGRTMIN+15=%d/n",SIGRTMAX-15,SIGRTMIN+15);
flag_envsaved = ENV_SAVED;
break;
case 1:
printf("recive signal SIGMIN+15/n");
default:
break;
}
signal(SIGRTMIN+15,sighandler_MIN15);
while(1)pause();
return 0;
}
编译后执行,在另外一个中端中用ps -a来查看该进程的pid,然后用 kill -s 49 pid来给这个进程发送信号,观察输出。
相关文章推荐
- Linux 多线程应用中的信号处理
- linux下的C语言开发(信号处理)
- Linux signal() 信号处理函数
- 我使用过的Linux命令之trap - 在脚本中处理信号
- Linux命令trap - 在脚本中处理信号 例子
- Linux — 信号 信号处理和信号处理函数详解(一)
- linux 捕获信号处理中遇到的死锁
- Linux 信号signal处理机制
- Linux信号产生与处理机制学习笔记(一)
- Linux下的信号处理函数
- Linux信号产生与处理机制学习笔记(二)
- Linux 信号详解二(信号分类,信号处理,kill)
- linux信号signal处理机制(三)
- linux 信号处理 二 (信号的默认处理)
- linux信号处理、killall、SIGALRM、sigaction函数和结构体、向进程发送信号
- Linux信号、信号处理和信号处理函数
- linux系统编程之信号(七):被信号中断的系统调用和库函数处理方式
- linux信号处理(续)
- linux下的C语言开发(信号处理)
- 5)Linux程序设计入门--信号处理