c-如何创建一个使用segfault崩溃但没有核心转储的程序



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

我已经写了一个程序来执行segfault(类似于int *a = 0; *a = 3;(,当我运行它时,终端打印Segmentation Fault (Core Dumped)

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

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

解决方案:我做了一个程序,只提升SIGUSR1信号;通过运行它,我得到了一个"崩溃",但没有打印(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更改为您需要的任何内容。

顺便说一下。。。有了信号,你就完全覆盖了当信号发出时发生的事情。如果您取消了出口调用,程序将继续运行,其中包含任何未定义的行为。

最新更新