`Segmentation fault` 消息是否在 STDERR 下?

use*_*107 21 bash io-redirection stderr

我运行了一个可执行文件 bash

./code > log
Run Code Online (Sandbox Code Playgroud)

它在终端上偶尔显示错误消息,而所有 printf 语句都进入日志文件。我像下面一样重新运行它

./code >& log
Run Code Online (Sandbox Code Playgroud)

现在,偶尔的错误消息也会进入日志。但是如果出现分段错误,它仍然显示在终端上。为什么?如何使消息Segmentation fault (core dumped)进入日志文件?


用户 $ bash --version

GNU bash,版本 4.2.24(1)-release (i686-pc-linux-gnu)

Gil*_*il' 23

“segmentation fault”消息被打印到 stderr,但它是 shell 的标准错误,而不是程序的标准错误。当 shell 检测到程序由于信号而终止时,它会打印此消息。

您可以通过在运行程序的 shell 脚本部分周围重定向 stderr 来使消息静音:

{ ./code; } >&log
Run Code Online (Sandbox Code Playgroud)


cjh*_*cjh 17

分段错误是一个信号,如果您没有捕捉到它,那么您的程序将被终止,并且您的 shell 会将其打印到它的 stderr(而不是您程序的 stderr)。

发生这种情况时,您的程序或 shell 可能会采取特定操作,通过程序捕获信号或您的 shell 捕获 SIGCHILD 信号,然后检查您孩子的退出状态。

  • 是的。知道了。如果有人感兴趣,这就是我所做的 http://pastebin.com/QyeJYYHC (2认同)