linux下c语言的setjmp()与alarm()

#include<stdio.h>#include<stdlib.h>#include<setjmp.h>#include<signal.h>#include<unist... #include <stdio.h>
#include <stdlib.h>
#include <setjmp.h>
#include <signal.h>
#include <unistd.h>
#include <pthread.h>

static void fun(void)
{
while (1)
{
fprintf(stderr, "fun()\n");
}
}

static jmp_buf timeout_env;

static void list_timeout(int sig)
{
siglongjmp(timeout_env, 1);
return;
}

void *pfun(void *arg)
{
/* 本来认为siglongjmp()返回之后,fun()占用的栈就被消除,程序会从alarm(0)开始继续跑,结果在linux上直接core掉了?为什么? */
if (sigsetjmp(timeout_env, 1) != 0)
{
alarm(0);
signal(SIGALRM, SIG_IGN);
while (1)
{
fprintf(stderr, "ign\n");
sleep (1);
}
}
signal(SIGALRM, list_timeout);
alarm(3);

fun();

return(0);
}

int main(void)
{
pthread_t pid;
pthread_create(&pid, NULL, pfun, NULL);
pthread_join(pid, NULL);
return(0);
}
展开
 我来答
我是百人敌
2012-03-05 · TA获得超过358个赞
知道小有建树答主
回答量:310
采纳率:0%
帮助的人:269万
展开全部
没懂。
不过楼主注意:程序崩溃不是setsigjmp返回时崩溃,
而是在while(1)之前(通过printf测试)
clitoriscn
2012-03-05 · TA获得超过3628个赞
知道小有建树答主
回答量:3258
采纳率:0%
帮助的人:1533万
展开全部
不知道,我也测试一下
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式