如何创建一个因段错误而崩溃但没有核心转储的程序
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 调用,程序将保留 运行,无论构成什么未定义的行为。
我目前正在用 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 调用,程序将保留 运行,无论构成什么未定义的行为。