您的位置:首页 > 运维架构 > Linux

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来给这个进程发送信号,观察输出。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: