为什么在Shell输出中运行的可执行操作到stdout,而不是崩溃时的stderr

Why an executable running in shell output to stdout instead of stderr when crashes?

本文关键字:stderr 崩溃 stdout 操作 输出 Shell 运行 为什么 可执行      更新时间:2023-10-16

我写了C 演示test.cpp喜欢:

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

然后编译

$ g++ test.cpp -o test

然后在外壳中运行:

$ ./test 2>error.txt

我希望将错误消息重定向到error.txt,但它们仍然通过Stdout在屏幕上打印。为什么发生这种情况?

输出如下所示:

Floating point exception (core dumped)

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

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

实际上,即使您重定向 stdout和stderr /dev/null

如果您创建一个子壳并将其stderr重定向,则会看到错误消息重定向:

( ./test ) 2>error.txt