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 信号,然后检查您孩子的退出状态。