zoukankan      html  css  js  c++  java
  • APUE学习笔记——第十章信号中10.15节例程的运行结果与书本里的不一样

    1.程序

    #include "apue.h"
    #include <setjmp.h>
    #include <time.h>

    static sigjmp_buf jmpbuf;
    static volatile sig_atomic_t canjump;
    void pr_mask(const char *str)
    {
    sigset_t sigset;
    int errno_save;

    errno_save = errno;
    if (sigprocmask(0, NULL, &sigset) < 0)
    err_sys("sigprocmask error");

    printf("%s", str);

    if (sigismember(&sigset, SIGINT)) printf("SIGINT");
    if (sigismember(&sigset, SIGQUIT)) printf("SIGQUIT");
    if (sigismember(&sigset, SIGUSR1)) printf("SIGUSR1");
    if (sigismember(&sigset, SIGALRM)) printf("SIGALRM");

    printf(" ");

    errno = errno_save;
    }

    static void sig_usr1(int signo)
    {
    time_t starttime;
    if (canjump == 0)
    return ;

    pr_mask("starting sig_usr1:");
    alarm(3);
    starttime = time(NULL);
    for (;;)
    if (time(NULL) > starttime + 5)
    break;
    pr_mask("finishing sig_usr1:");
    canjump = 0;
    siglongjmp(jmpbuf, 1);
    }

    static void sig_alrm(int signo)
    {
    pr_mask("int sig_alrm: ");
    }

    int main(void)
    {
    if (signal(SIGUSR1, sig_usr1) == SIG_ERR)
    err_sys("signal(SIGUSR1) error");

    if (signal(SIGALRM, sig_alrm) == SIG_ERR)
    err_sys("signal(SIGALRM) error");

    pr_mask("starting main: ");

    if (sigsetjmp(jmpbuf, 1))
    {
    pr_mask("ending main: ");
    exit(0);
    }
    canjump = 1;
    for (;;)
    pause();
    }

    2.结果

    xiaoheng@ubuntuxh:~/Program/apue/apue10/1010$ ./1015 &
    [1] 18966
    xiaoheng@ubuntuxh:~/Program/apue/apue10/1010$ starting main:
    kill -USR1 18966
    starting sig_usr1:
    xiaoheng@ubuntuxh:~/Program/apue/apue10/1010$ int sig_alrm:
    finishing sig_usr1:
    ending main:

    没有打印SIGUSR1跟SIGALRM

  • 相关阅读:
    语料和文本处理
    seq2seq+torch7聊天机器人bug处理
    unity3d inputfield标签控制台打印object
    多种语言tcp编程
    处理json中的空格
    安卓无法访问Azure服务器和微软API
    Xamarin/Unity3d无法访问Azure服务器或者微软API
    unity3d C# soket客户端接受失败
    unity3d之public变量引发错误
    unity3d,java,c#,python,rospy的socket通信测试
  • 原文地址:https://www.cnblogs.com/xiaoheng008/p/3735841.html
Copyright © 2011-2022 走看看