当前位置:  技术问答>linux和unix

signal(SIGALRM,...)为什么执行不起来?

    来源: 互联网  发布时间:2016-08-29

    本文导语:  #define ALARM_SLEEP       1 void my_sigalarm(int sig) {     printf("sigalarm!n");     alarm(ALARM_SLEEP);     signal(SIGALRM, my_sigalarm); } int main(int argc, char* argv[]) {     signal(SIGALRM, my_sigalarm);     alarm(ALARM_SLEEP);     sl...

#define ALARM_SLEEP       1

void my_sigalarm(int sig) {
    printf("sigalarm!n");
    alarm(ALARM_SLEEP);
    signal(SIGALRM, my_sigalarm);
}

int main(int argc, char* argv[]) {
    signal(SIGALRM, my_sigalarm);
    alarm(ALARM_SLEEP);
    sleep(3000);

    return 0;
}

上面的代码在ARM板子上面一跑,只输出一行:
sigalarm!
程序接着就退出了,不提示任何信息。

请问这是为什么?谢谢!

|
[/code]signal(SIGALRM,...)为什么执行不起来?[图片]

#include 
#include 
#include 

#include 

/* ARGSUSED */
static void catch_sigalrm(int sig)
{
        (void)printf("%sn", "SIGALRM received.");
}

static void (*Signal (int sig, void (*handler)(int)))(int)
{
        struct sigaction act, oact;

        act.sa_handler = handler;
        act.sa_flags = 0;
#ifdef SA_INTERRUPT
        act.sa_flags |= SA_INTERRUPT;
#endif
        if (sigaction(sig, &act, &oact))
                return SIG_ERR;

        return oact.sa_handler;
}

int main(void)
{
        struct itimerval it;

        (void)Signal(SIGALRM, &catch_sigalrm);
        it.it_interval.tv_sec = 1;
        it.it_interval.tv_usec = 0;
        it.it_value.tv_sec = 1;
        it.it_value.tv_usec = 0;
        (void)setitimer(ITIMER_REAL, &it, NULL);
        
        /* CONSTCOND */
        for (;;)
                (void)pause();

        /* NOTREACHED */
        return 0;
}


|
接收到信号以后,SLEEP会被中断。所以,在信号处理程序执行完后,程序从SLEEP被中断后开始执行。程序就此退出了。如果想要不使程序退出的话,应该将alarm放到死循环中。

/* Install signal handler */
signal( SIGALRM, handler );

/* Suspend signal SIGSEGV */
sigset_t mask;
sigemptyset( &mask );
sigaddset( &mask, SIGSEGV );

while ( 1 )
{
        alarm( 1 );
        sigsuspend( &mask );
}

|
当然只了,你只设置了执行一次时钟信号,所以只会执行一次.
sleep会被信号中断,所以也不会等待3000s,
所以你的程序现在就是不会等待的只执行一次my_sigalarm().
所以你不用惊讶 :)

    
 
 
 
本站(WWW.)旨在分享和传播互联网科技相关的资讯和技术,将尽最大努力为读者提供更好的信息聚合和浏览方式。
本站(WWW.)站内文章除注明原创外,均为转载、整理或搜集自网络。欢迎任何形式的转载,转载请注明出处。












  • 相关文章推荐
  • java命名空间java.util.concurrent.locks接口condition的类成员方法: signal定义及介绍
  • signal 7和signal 11
  • 请教signal函数的用法!
  • 关于系统信号处理函数signal()的疑问.
  • 关于signal信号
  • signal函数定义该怎么理解?
  • 关于signal返回值是什么?
  • pending signal
  • 关于Linux驱动中signal的使用
  • signal函数的定义问题?搞不懂.
  • about "signal"
  • 有关signal handler,请教!
  • 关于signal函数
  • signal函数使用出问题?
  • 关于signal函数的问题
  • signal handler 问题
  • signal的疑惑
  • signal的处理函数问题
  • signal 函数请教
  • 关于signal函数的问题,大家帮我看看
  • 关于signal ()


  • 站内导航:


    特别声明:169IT网站部分信息来自互联网,如果侵犯您的权利,请及时告知,本站将立即删除!

    ©2012-2021,,E-mail:www_#163.com(请将#改为@)

    浙ICP备11055608号-3