为什么在崩溃时shell运行的可执行文件输出到stdout而不是stderr?

时间:2017-12-22 12:08:52

标签: c++ shell

我写了一个C ++演示test.cpp,如:

int main()
{
    int num = 1 / 0;
}

然后编译它

$ g++ test.cpp -o test

然后在shell中运行它:

$ ./test 2>error.txt

我希望将错误消息重定向到error.txt,但它们仍然会通过stdout在屏幕上打印。为什么会这样?

输出显示如下:

Floating point exception (core dumped)

1 个答案:

答案 0 :(得分:3)

因为程序生成的错误消息。它由操作系统生成。

想想:该计划已经死亡。它如何产生额外的输出?

事实上,即使您将程序 stdout和stderr 重定向到/dev/null,您也会观察输出。

如果您创建子shell并重定向其stderr,您将看到重定向的错误消息:

( ./test ) 2>error.txt