抑制段错误信号

时间:2016-01-26 02:21:29

标签: linux bash segmentation-fault signals

我正在分析一组有缺陷的程序,经过一些测试,它们可能会以segfault终止。 segfault事件记录在 $("button").click(function() { id = $(this).parent().parent().children('td.product_id').text(); price = $(this).parent().parent().children('td.price').text(); });

例如,以下代码段返回print(dtIris, topn = 60) 并将其记录。

/var/log/syslog

我的问题是如何抑制段错误,使 NOT 出现在系统日志中。我尝试Segmentation fault来捕获以下脚本中的信号:

    #!/bin/bash
    ./test

它返回:

trap

因此,它会捕获段错误,但段错误仍然记录。

 #!/bin/bash
 set -bm
 trap "echo 'something happened'" {1..64}
 ./test

2 个答案:

答案 0 :(得分:0)

您可以尝试将./test更改为以下行:

. ./test

这将在同一个shell中执行./test

答案 1 :(得分:0)

我们可以用e来抑制系统范围内的日志消息。克。

echo 0 >/proc/sys/debug/exception-trace

- 另见

如果我们在ptrace()控件下运行它,我们可以禁止单个进程的日志消息,就像在调试器中一样。这个程序就是这样做的:

exe.c

#include <sys/wait.h>
#include <sys/ptrace.h>

main(int argc, char *args[])
{
    pid_t pid;
    if (*++args)
    if (pid = fork())
    {
        int status;
        while (wait(&status) > 0)
        {
            if (!WIFSTOPPED(status))
                return WIFSIGNALED(status) ? 128+WTERMSIG(status)
                                           : WEXITSTATUS(status);
            int signal = WSTOPSIG(status);
            if (signal == SIGTRAP) signal = 0;
            ptrace(PTRACE_CONT, pid, 0, signal);
        }
        perror("wait");
    }
    else
    {
        ptrace(PTRACE_TRACEME, 0, 0, 0);
        execvp(*args, args);
        perror(*args);
    }
    return 1;
}

在你的情况下,用buggy程序作为参数调用

exe ./test

- 然后exe的退出状态通常是test的退出状态,但如果test被信号 n 终止(分段错误),它是128 + n

在我写完之后,我意识到我们也可以使用strace来达到目的,e。克。

strace -enone ./test