如何创建一个因段错误而崩溃但没有核心转储的程序

How to create a program that crashes with a segfault, but without core dump

我目前正在用 C 编写类 UNIX shell,为了测试我的 shell,我需要创建一个程序来创建分段错误,但没有 Core Dumped 正在打印。

我已经编写了一个会出现段错误的程序(类似于 int *a = 0; *a = 3;),当我 运行 终端打印 Segmentation Fault (Core Dumped).

我应该写什么代码,或者我应该使用什么命令,以便我的终端在我 运行 时只打印 Segmentation Fault 而不是 Segmentation Fault (Core Dumped) ?

编辑: 我不仅希望缩短输出,我还想创建一个在崩溃时不创建核心转储的程序(这样当我在程序的退出状态上使用 WCOREDUMP 宏时,由 waitpid 给出,它 returns 1.)

解决方法: 我制作了一个程序,它只引发 SIGUSR1 信号;通过 运行 宁它,我得到一个 'crash' 但没有 (core dumped) 被打印 - 这就是我正在寻找的。

代码,以防有人需要:

#include <signal.h>

int main()
{
    raise(SIGUSR1);
    return 0;
}

终端输出: User defined signal 1

你可能会搞砸 signal.h

`

#include <signal.h>    

void sig_func(int sig)
{
    exit(1);
}

int main (void)
{
    signal(SIGSEGV, sig_func); // sets a new signal function for SIGSEGV
    raise(SIGSEGV); // causes the signal function to be called

    return 0;
}

`

在此示例中,它应该以 1 退出,不打印任何内容,将 sig_func 更改为您需要的任何内容。

顺便说一句...有了信号,您将完全覆盖发出该信号时发生的情况。如果你摆脱了 exit 调用,程序将保留 运行,无论构成什么未定义的行为。