我目前正在用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
更改为您需要的任何内容。
顺便说一下。。。有了信号,你就完全覆盖了当信号发出时发生的事情。如果您取消了出口调用,程序将继续运行,其中包含任何未定义的行为。