LinuxSir.cn,穿越时空的Linuxsir!

 找回密码
 注册
搜索
热搜: shell linux mysql
查看: 1384|回复: 1

请教一个关于abort函数的POSIX.1实现的问题

[复制链接]
发表于 2011-8-11 17:36:20 | 显示全部楼层 |阅读模式
请教一个在《APUE》中提供的abort函数的POSIX.1实现的问题:

#include <unistd.h>
#include <signal.h>
#include <stdio.h>
#include <stdlib.h>

void abort(void)
{
        sigset_t mask;
        struct sigaction action;

        sigaction(SIGABRT, NULL, &action);
        if (action.sa_handler == SIG_IGN) {
                action.sa_handler = SIG_DFL;
                sigaction(SIGABRT, &action, NULL);
        }
        if (action.sa_handler == SIG_DFL)
                fflush(NULL);

        sigfillset(&mask);
        sigdelset(&mask, SIGABRT);
        sigprocmask(SIG_SETMASK, &mask, NULL);
        kill(getpid(), SIGABRT);

        fflush(NULL);

        /* ============================
         * 之前一句fflush(NULL),是因为在执行完信号处理程序
         * 后还需在此冲刷io缓存,
         * 但不理解为什么还要重复执行下面4句?
         * 之后马上就执行exit了,重复4句的意义何在?
         */
        action.sa_handler = SIG_DFL;
        sigaction(SIGABRT, &action, NULL);
        sigprocmask(SIG_SETMASK, &mask, NULL);
        kill(getpid(), SIGABRT);
        /* ============================ */

        exit(0);
}

麻烦各位能帮忙解答一下,谢谢了!
发表于 2011-8-17 09:39:07 | 显示全部楼层
恢复系统默认的SIGABORT处理函数,然后用kill触发进程执行该函数。
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

快速回复 返回顶部 返回列表