如何在Fortran 90程序中抑制由SIGSEGV或SIGFPE引起的输出?

时间:2009-01-06 12:37:11

标签: bash fortran sigsegv

我有一个运行用Fortran 90编写的模拟程序的bash脚本,所有输出都被重定向到一个文件。如果程序没有问题,我设置了一个成功参数。代码看起来像这样:

#!/bin/bash
...
echo -n "Running program..."
./sim_program >& file && success="true"
if [ $success ]; then
  echo "OK"
else
  echo "NOT OK"
fi
...

屏幕输出应该是“正在运行程序......正常”或“运行程序......不行”。在某些情况下,仿真程序将因浮点异常或分段故障而崩溃,并发送相应的信号(SIGSEGV / SIGFPE)。输出可能看起来像这样:

:~>execute_script
Running program.../path/to/script: line 232: 15350 Floating Point Exception ./sim_program >& file && success="true"
NOT OK

如何抑制由SIGFPE或SIGSEGV引起的错误输出,以便我得到

:~>execute_script
Running program... NOT OK

即使有这样的错误?我已经研究过使用陷阱,例如

trap "" SIGSEGV SIGFPE
./sim_program >& file && success="true"
trap SIGSEGB SIGFPE

然后我仍然得到类似

的东西
:~>execute_script
Running program... Floating Point Exception
NOT OK

感谢任何帮助!

2 个答案:

答案 0 :(得分:2)

该错误消息可能是stderr。

尝试将其放在脚本的开头:

#!/bin/bash
exec 2> /dev/null

并且发送到stderr的任何内容都将转到null设备而不是终端。

答案 1 :(得分:0)

我相信您的错误消息是写在stderr上的。您需要将其重定向到/ dev / null。

./ sim_program 2> / dev / null