相关疑难解决方法(0)

为什么不能使用signalfd 捕获SIGSEGV?

我的系统是 ubuntu 12.04。我从 修改了示例man 2 signalfd,并添加了示例sigaddset(&mask, SIGSEGV)。但是在SIGSEGV生成时我无法获得输出。

它是一个错误glibc吗?源代码片段如下:

       sigemptyset(&mask);
       sigaddset(&mask, SIGINT);
       sigaddset(&mask, SIGQUIT);
       sigaddset(&mask, SIGSEGV);

       /* Block signals so that they aren't handled
          according to their default dispositions */

       if (sigprocmask(SIG_BLOCK, &mask, NULL) == -1)
           handle_error("sigprocmask");

       sfd = signalfd(-1, &mask, 0);
       if (sfd == -1)
           handle_error("signalfd");
        int* a = NULL;
       for (;;) {
           s = read(sfd, &fdsi, sizeof(struct signalfd_siginfo));
           if (s != sizeof(struct signalfd_siginfo))
               handle_error("read");

           if (fdsi.ssi_signo == SIGINT) {
               printf("Got SIGINT\n"); …
Run Code Online (Sandbox Code Playgroud)

linux signals

4
推荐指数
1
解决办法
1434
查看次数

标签 统计

linux ×1

signals ×1