使用“&”运行时,Linux 终端中缺少段错误输出

使用“&”运行时,Linux 终端中缺少段错误输出

我正在调试一个必须与其他组件一起运行的应用程序。我将所有内容包装在一个脚本中:

#!/bin/bash 
./component1 > 1.log & 
./my_application & 
./component2 > 2.log &

我想在终端中看到输出,所以我没有重定向输出my_application

结果是my_application出现了段错误。但奇怪的是,抱怨段错误信息的输出行没有在我的终端中打印出来。最后一行根本就不见了。

如果我./my_appliation在另一个终端中单独运行,则输出正常。我看到最后一行“分段错误”

当我使用 & 运行应用程序时,为什么输出会丢失? 如果我在命令末尾添加 & 会有什么不同?

答案1

消息“段错误”实际上不是从写的,./my_applitation而是从 shell 发出的。

当您&在命令后使用时,shell 将在子shell 中在后台运行它,我认为该子shell 的 stderr 输出就是丢失的内容。

我在这里确认了同样的事情:

$ cat >segf.c <<EOF
int main(int argc, char *argv[]){
char *p;
p=0;
printf("%d", *p);
}
EOF
$ make segf
$ bash -c "./segf"
Segmentation fault
$ bash -c "./segf &"
$

答案2

可能是因为您的脚本中 ./component1, ./my_application, ./component2 同时执行,如果它们使用您系统中相同的文件或设备,则可能会出现段错误。

相关内容